SpringBoot在Install后默认生成的是jar包,然后在JAVA命令行中通过java -a 项目.jar 的方式来运行项目。

但这种方式方便本地开发环境的调试,在生产环境中并不方便,因为web项目每次更新不可能都全站覆盖更新,不利于网站稳定性,还有附件目录、生产配置等是不能被覆盖的。

解决方案是像以前springmvc项目那也发布成war包方式(文件夹的目录形式),以后每次只要更新变动的文件即可,不会影响网站和服务的正常运行。

Springboot 发布成war包形式,需经过以下步骤。

1.将web项目的pom.xml文件中默认的jar方式改为war

<artifactId>mydemo-web</artifactId>
<version>1.0-SNAPSHOT</version>
<name>mydemo-web</name>
<!--默认为jar方式-->
<!--<packaging>jar</packaging>-->
<!--改为war方式-->
<packaging>war</packaging>

2.将内置的Tomcat容器从依赖项中排查

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
<exclusions>
<!-- 排除spring-boot-starter-web中的Tomcat -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>

3.修改启动类

继承SpringBootServletInitializer,实现configure方法

修改前

public class MyDemoWebApplication {

public static void main(String[] args) {
ApplicationContextapplicationContext=SpringApplication.run(MyDemoWeb.class, args);

}

}

修改后

public class MyDemoWebApplication extends SpringBootServletInitializer {

public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(MyDemo.class, args);

}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyDemo.class);
}
}

4.添加finalName

为了防止应用上下文所导致的项目访问资源加载不到的问题,

建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签

<build>
<!-- 应与application.properties(或application.yml)中context-path保持一致 -->
<finalName>mydemoweb</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>