spring boot 入门(二)——改变应用服务器

来源:互联网 发布:嫖相 知乎 编辑:程序博客网 时间:2024/06/05 21:51

在上一篇中提到springboot项目只要加入了spring-boot-starter-web的依赖里面包含了内置的tomcat应用服务器,项目就可以像普通java工程一样通过main方法启动。但是项目不可能总是开发状态的,总是需要发布到应用服务器中的,在快速迭代的开发过程中,总是需要多次打包的。或者你想把tomcat换成jetty。这篇文章也许可以给你解答。
本文参考了http://blog.csdn.net/james_wade63/article/details/51009423

三步配置实现内置和外置tomcat同时存在

一、将项目的启动类Application.java继承SpringBootServletInitializer并重写configure方法

@SpringBootApplicationpublic 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了。