下面具体介绍如何配置springboot项目打成war包
- 打成war包启动和本地用过main方法启动不同,本地main方法启动是依赖于内置的tomcat,而打成war包是放到tomcat内启动,所以要剔除掉tomcat的依赖部分,但还要保存servlet的部分。需要在pom.xml中增加配置如下:
<packaging>war</packaging> <dependency> <!-- 指定为Web应用,并启动一个内嵌的Servlet容器(默认是Tomcat)用于处理HTTP请求 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- springboot本身开发出来只支持3.0以上,为了让spring boot支持servlet2.5 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。 相当于compile,但是打包阶段做了exclude操作--> <scope>provided</scope> </dependency>
- 方法主入口继承SpringBootServletInitializer类并实现configure方法
/** * 配置除去了自动配置数据源的类-DataSourceAutoConfiguration,因为 * 这个注解会把sping的配置的数据源全部都自动注入,不会默认注入一个,当使用其他数据源时再调用另外的数据源。 * @author zhanglf * */ @SpringBootApplication(exclude={DataSourceAutoConfiguration.class}) public class Application extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } }
经过以上两步即可实现打成war包,并在tomcat中正常启动。但是!如果想访问controller层的方法,这些配置还是不够的。还要注意tomcat版本兼容问题,springboot2.0以上与tomcat7会有兼容问题,可以选择提升tomcat版本,或者在tomcat的lib中添加依赖jar包