springboot项目发布到独立的tomcat中运行&打成jar包运行

springboot的打包方式依赖于插件:(下面插件打出的包与普通的包目录结构有区别)java

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

 

===================发布到独立的Tomcat运行============

 在开发阶段咱们推荐使用内嵌的tomcat进行开发,由于这样会方便不少,可是到生成环境,我但愿在独立的tomcat容器中运行,由于咱们须要对tomcat作额外的优化,这时咱们须要将工程打包成war包发进行发布。web

1. 工程的打包方式为war

 

2. 将spring-boot-starter-tomcat的范围设置为provided

设置为provided是在打包时会将该包排除,由于要放到独立的tomcat中运行,是不须要的。spring

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

 发现原来项目中没有配置上面配置,由于咱们配置了Springboot,具备依赖传递,所以自动加上上面的配置,咱们须要手动配上覆盖依赖传递的配置:sql

3. 修改代码,设置启动配置

须要继承SpringBootServletInitializer,而后重写configure,将Spring Boot的入口类设置进去。数据库

package cn.qlq.config; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import com.jolbox.bonecp.BoneCPDataSource; /** * 发布到独立的Tomcat须要继承SpringBootServletInitializer类并重写configure方法 */ @Configuration // 经过该注解来代表该类是一个Spring的配置,至关于一个xml文件
@ComponentScan(basePackages = "cn.qlq") // 配置扫描包
@PropertySource(value = { "classpath:db.properties" }, ignoreResourceNotFound = true) public class SpringConfig extends SpringBootServletInitializer { @Value("${jdbc.url}") private String jdbcUrl; @Value("${jdbc.driverClassName}") private String jdbcDriverClassName; @Value("${jdbc.username}") private String jdbcUsername; @Value("${jdbc.password}") private String jdbcPassword; @Bean(destroyMethod = "close") public DataSource dataSource() { BoneCPDataSource boneCPDataSource = new BoneCPDataSource(); // 数据库驱动
 boneCPDataSource.setDriverClass(jdbcDriverClassName); // 相应驱动的jdbcUrl
 boneCPDataSource.setJdbcUrl(jdbcUrl); // 数据库的用户名
 boneCPDataSource.setUsername(jdbcUsername); // 数据库的密码
 boneCPDataSource.setPassword(jdbcPassword); // 检查数据库链接池中空闲链接的间隔时间,单位是分,默认值:240,若是要取消则设置为0
        boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60); // 链接池中未使用的连接最大存活时间,单位是分,默认值:60,若是要永远存活设置为0
        boneCPDataSource.setIdleMaxAgeInMinutes(30); // 每一个分区最大的链接数
        boneCPDataSource.setMaxConnectionsPerPartition(100); // 每一个分区最小的链接数
        boneCPDataSource.setMinConnectionsPerPartition(5); return boneCPDataSource; } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // 设置启动类,用于独立tomcat运行的入口
        return builder.sources(SpringConfig.class); } }

4.打war包:

 

打包成功:tomcat

5. 部署到tomcat

  • 第一种:将此项目做为默认项目的部署方式

(1)将war包解压到webapps下的ROOT目录中(将原来的ROOT文件夹下面的东西删除掉),启动:springboot

 

WEB-INF下面 没有web.xmlapp

 

   解释:上面解压后的文件没有web.xml,可是仍能启动。由于SpringConfig继承了SpringBootServletInitializer,因此打包的时候spring-boot作了一系列初始化工做(如上面的org文件夹)。webapp

 (2)启动测试:maven

  • 第二种:将此项目相似于普通的项目进行部署,访问须要加项目名称

(1)将打出的war包复制到Tomcat安装目录下的webapps目录下,并将war包从新命名为SSM.war,启动Tomcat(Tomcat启动的时候会自动扫描war包并解压)

 

 (2)启动测试:

注意:

  springboot项目方式不支持用Eclipse的export导出为war包而后部署到tomcat,由于这种Eclipse的Export打出的war包没有带springboot所作的初始化工做。打包的东西以下:

==============web项目打成jar包独立运行===============

  这种方式使用简单,只须要安装JDK环境便可使用。可是不利于tomcat的优化,并且一个项目对应一个内嵌的tomcat。

1.工程打包方式改成jar包

 

2. 将spring-boot-starter-tomcat的范围设置为默认值compile

 

3.使用clean package命令打成jar包

 

 

4.采用java -jar的方式启动测试:(这种方式启动是不做为守护进程,窗口关闭即关掉此JVM)

java -jar ./springboot-ssm-0.0.1-SNAPSHOT.jar

 

 测试:

 

补充:若是是IDEA中运行项目须要去掉provided,缘由是

  这多是Intellij的一个bug,在使用spring-boot的时候,若是把某个引入的依赖设置为provided,那么在Intellij启动时就会找不到相应的类。所以,此时须要把此项配置给注释掉,可是打包上线的时候并不须要这些依赖,那么在打包的时候就把注释打开,便可。

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
相关文章
相关标签/搜索