在上一篇中提到springboot项目只要加入了spring-boot-starter-web的依赖里面包含了内置的tomcat应用服务器,项目就可以像普通java工程一样通过main方法启动。但是项目不可能总是开发状态的,总是需要发布到应用服务器中的,在快速迭代的开发过程中,总是需要多次打包的。或者你想把tomcat换成jetty。这篇文章也许可以给你解答。
本文参考了http://blog.csdn.net/james_wade63/article/details/51009423
三步配置实现内置和外置tomcat同时存在
一、将项目的启动类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);
}
}
这个不是很懂,应该是提供给外部tomcat的启动入口。
二、pom.xml文件中修改之前的packaging标签内容jar改成war
<packaging>war</packaging>
这样可以确保maven打包的时候会打war包
三、pom.xml文件中增加依赖配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
这一步的重点是scope标签值为provided。加入这个依赖之后你会发现maven jar包没有任何变化。
provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。这样就不会与外部的tomcat冲突。
完成以上三步就可以右键项目—>maven—>update project configuration..来更新一下项目配置。然后可以mvn clean package了。最后将war包放在外部tomcat/webapp下,运行tomcat,ok。
同时,你依旧可以在Application类中右键run来启动内部tomcat。
两步配置内置jetty替代内置tomcat
如果你的项目使用jetty作为服务器而不是tomcat。而springboot默认的内置服务器是tomcat,默认的启动类配置也是依据tomcat的。
两步实现替换内置服务器。
一、修改pom.xml文件如下:
<dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<scope>provided</scope>
</dependency>
这一步是去掉了tomcat内置服务器的依赖,增加了jetty的,而且设置了scope为provided,这样打包的时候就不会加入war包中。
二、在启动类中增加一个方法和一个注解
@Bean
public EmbeddedServletContainerFactory servletContainer() {
JettyEmbeddedServletContainerFactory factory =
new JettyEmbeddedServletContainerFactory();
return factory;
}
这样在使用内置应用服务器的时候jetty就会替代tomcat了。