-boot 默认提供内嵌的 tomcat,所以打包直接生成 jar 包,用 -jar 命令就可以启动。但是,有时候我们更希望一个 tomcat 来管理多个项目,这种情况下就需要项目是 war 格式的包而不是 jar 格式的包。spring-boot 同样提供了解决方案,只需要简单的几步更改就可以了,这里提供 maven 项目的解决方法:
1. 将项目的启动类 Application.java 继承 SpringBootServletInitializer 并重写 configure 方法
- @SpringBootApplication
- public class Application extends SpringBootServletInitializer {
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
- return application.sources(Application.class);
- }
- public static void main(String[] args) throws Exception {
- SpringApplication.run(Application.class, args);
- }
- }
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args); } }
2. 在 pom.xml 文件中,project 下面增加 package 标签
- <packaging>
- war
- </packaging>
3. 还是在 pom.xml 文件中,dependencies 下面添加
- <dependency>
- <groupId>
- org.springframework.boot
- </groupId>
- <artifactId>
- spring-boot-starter-tomcat
- </artifactId>
- <scope>
- provided
- </scope>
- </dependency>
这样,只需要以上 3 步就可以打包成 war 包,并且部署到 tomcat 中了。需要注意的是这样部署的 request url 需要在端口后加上项目的名字才能正常访问。spring-boot 更加强大的一点就是:即便项目是以上配置,依然可以用内嵌的 tomcat 来调试,启动命令和以前没变,还是:mvn spring-boot:run。
如果需要在 springboot 中加上 request 前缀,需要在 application.properties 中添加 server.contextPath=/prefix / 即可。其中 prefix 为前缀名。这个前缀会在 war 包中失效,取而代之的是 war 包名称,如果 war 包名称和 prefix 相同的话,那么调试环境和正式部署环境就是一个 request 地址了。
来源: