前言

写下这篇文章是为了记录第一次发布Spring Boot项目的过程。

初步认识Spring Boot

SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。

SpringBoot所具备的特征

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置。

在上面说到内嵌Tomcat或jetty等sevlet容器,基于Maven可以创建可执行的Jar包和War包。总结得非常到位,但是动手操作时,就会遇到一些知识总结以外的具体操作的问题——那就是过程。

首先,可执行jar包在windows上不可以直接运行。其次,在命令行中java -jar去执行,一旦命令窗口关闭或服务器宕机重启,服务即停止。

Spring Boot项目部署到Windows服务器——三种方式

在写部署的三种方式之前,感谢一下Intellij IDEA,刚开始还不习惯,但通过一个项目熟悉下来,太好用了!在Tab Split、Git、Maven Projects、代码折叠、代码风格等。

一、jar包(官方推荐)

6afc0fe6bb6d

image.png

(说明:Net4.0可选,一般用不到,提供文件名给有需要的人作为参考;curl也是根据实用情况下载使用)

1.1 操作步骤

1.1.1 将项目打成jar包

jar

true

...

...

org.springframework.boot

spring-boot-maven-plugin

...

1.1.2 配置非常好用的winsw的Service.xml

根据文章中的内容进行搭建也可以,根据官方文档使用rotate,由于个人水平有限,加上时间关系,没有去研究彻底log mode的详细配置,在此记录下来。

配置参考文档:https://github.com/kohsuke/winsw/blob/master/doc/xmlConfigFile.md#user-content-logging

MyService

My Service(Powered by WinSW)

XX系统

C:\Program Files\Java\jdk1.8.0_231\bin\java.exe

-Xmx2048m -jar myapp.jar --httpPort=60

rotate

1.2遇到过的坑

1.2.1给定编码中的字符无效

D:\app\home>my_Service.exe install

System.Xml.XmlException: 给定编码中的字符无效。 第 31 行,位置 8。

在 System.Xml.XmlTextReaderImpl.Throw(Exception e)

在 System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32&

charsCount)

在 System.Xml.XmlTextReaderImpl.GetChars(Int32 maxCharsCount)

在 System.Xml.XmlTextReaderImpl.ReadData()

在 System.Xml.XmlTextReaderImpl.ParseCDataOrComment(XmlNodeType type, Int32&

outStartPos, Int32& outEndPos)

在 System.Xml.XmlTextReaderImpl.ParseCDataOrComment(XmlNodeType type)

在 System.Xml.XmlTextReaderImpl.ParseComment()

在 System.Xml.XmlTextReaderImpl.ParseElementContent()

在 System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)

在 System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)

原因:中文乱码

解决办法:Notepad++转为UTF-8编码

1.2.2 服务启动1067错误

按照第二篇文章中说的:

java

我的服务器上配置了环境变量,但无法启动,错误1067。

原因:还没有时间进行排查,在此先记录下来。

解决:直接指定jdk路径:C:\Program Files\Java\jdk1.8.0_231\bin\java.exe

二、war包

2.1、修改配置文件

war

true

...

org.springframework.boot

spring-boot-starter-tomcat

provided

org.apache.tomcat.embed

tomcat-embed-jasper

provided

...

org.apache.maven.plugins

maven-war-plugin

2.2、增加启动类(与SpringBoot启动类放在同一个文件夹)

public class SpringBootStartApplication extends SpringBootServletInitializer {

Logger logger= LoggerFactory.getLogger(SpringBootStartApplication.class);

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

logger.debug("starting spring boot initializer ......");

return builder.sources(DlhjiaApplication.class);

}

}

2.3、使用maven 命令打包后,直接部署到Tomcat中启动

三、Jar包,分离lib、配置文件与静态资源

为什么方式一不满足我的需求呢?当项目中遇到只有小的bug修复,甚至只改了一个类文件或者配置文件,前端页面的一个参数时,方式一非常慢。

所以,在网上看到了一篇好文:《Springboot 打jar包分离lib,配置文件正确方式(二)》

操作步骤

3.1修改pom.xml

jar

true

...

org.apache.maven.plugins

maven-compiler-plugin

${java.version}

${java.version}

org.apache.maven.plugins

maven-dependency-plugin

copy-dependencies

package

copy-dependencies

target/lib

false

false

runtime

org.springframework.boot

spring-boot-maven-plugin

ZIP

cn.jstars

datatocloud

org.apache.maven.plugins

maven-resources-plugin

UTF-8

org.apache.maven.plugins

maven-surefire-plugin

true

...

true

src/main/resources

static/**

templates/**

*.yml

*.properties

*.xml

*.txt

3.2配置winsw

-Xmx2048m -jar -Dloader.path=.,lib dlhjia.jar --httpPort=60

3.3 最后的文件存放结构

6afc0fe6bb6d

image.png

这样就后期的维护与升级就很方便,像lib这样的文件也不用重复打包上传,节省升级时间!

Spring Boot项目发布三种模式总结:

一、打成jar包,直接通过java -jar启动;+winsw2.3.0实现服务自动启动

二、调整pom.xml,新建启动类,打成war包,在tomcat中启动

三、打成jar包,分离lib、配置文件与静态资源;+winsw2.3.0实现服务自动启动

为了在使用过程中,维护与升级更方便,推荐使用后面两种模式。

IDEA Tomcat启动配置

6afc0fe6bb6d

image.png

-完-

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐