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

在上一篇中提到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>warpackaging>

这样可以确保maven打包的时候会打war包

三、pom.xml文件中增加依赖配置

<dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-tomcatartifactId>
        <scope>providedscope>
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.bootgroupId>  
    <artifactId>spring-boot-starter-webartifactId>  
    <exclusions>  
        <exclusion>  
            <groupId>org.springframework.bootgroupId>  
            <artifactId>spring-boot-starter-tomcatartifactId>  
        exclusion>  
    exclusions>  
dependency>  
<dependency>  
    <groupId>org.springframework.bootgroupId>  
    <artifactId>spring-boot-starter-jettyartifactId> 
    <scope>providedscope> 
dependency>  

这一步是去掉了tomcat内置服务器的依赖,增加了jetty的,而且设置了scope为provided,这样打包的时候就不会加入war包中。

二、在启动类中增加一个方法和一个注解

    @Bean  
    public EmbeddedServletContainerFactory servletContainer() {  
        JettyEmbeddedServletContainerFactory factory =  
                new JettyEmbeddedServletContainerFactory();  
        return factory;  
    }

这样在使用内置应用服务器的时候jetty就会替代tomcat了。

你可能感兴趣的:(spring-boot)