服务器上部署SpringBoot项目

因为SpringBoot自带Tomcat容器, 所以利用Maven一起打包, IDE直接启动或者直接命令行 java -jar xxxx.jar指令就可以启动项目, 这样的方式虽然确实简单, 为我们省去了去配置一个tomcat容器的操作, 但是不好的地方就是我们一旦关了IDE或者命令行, 那么项目就停掉了. 所以这里介绍下 如何部署项目.

这里主要介绍的是 用Maven管理和构建项目的. Gradle也很类似简单.

1. 修改pom.xml

因为SpringBoot自带tomcat容器, 所以我们项目依赖要把自带的tomcat容器exclude掉.

然后用我们服务器上自己安装的tomcat容器. 也就是把项目打包后的war包放到服务器上的tomcat下的webapps下.

具体的配置如下
1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

这里的scope是maven配置依赖的指定依赖的作用的范围, 有test, compile, provided等.
这里的provided就是项目打包的时候, 将该依赖exclude掉.

2. 修改pom.xml的打包的方式

将默认的jar修改为打包的方式为war

1
<packaging>war</packaging>

3. 修改项目的入口类.

提供一个SpringBootServletInitializer的子类, 并且覆盖它的configure方法, 这充分利用了Spring框架对Servlet 3.0的支持,并允许你在应用通过servlet容器启动时配置它。通常,你只需把应用的主类改为继承SpringBootServletInitializer即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@SpringBootApplication
public class SbMyBatisApplication extends SpringBootServletInitializer{

/**
* 覆盖configure方法.
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SbMyBatisApplication.class);
}

public static void main(String[] args) {
SpringApplication.run(SbMyBatisApplication.class, args);
}
}

4. 最后一步,

利用maven打包方法, 可以在ide中做, 也可以直接命令行 mvn clean && mvn package即可.

将maven打出来的war包scp到服务器上tomcat的webapps目录下.

一些注意点.

注意 按以上方式配置下, 项目的总的配置文件(不管是application.yml还是application.properties)中的

1
2
3
server:
port: 8888
context-path: /rootPath

配置的端口和上下文将不起作用. 其他spring和mybatis还有freemarker等等配置都依旧生效.