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


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

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

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

     在开发阶段我们推荐使用内嵌的tomcat进行开发,因为这样会方便很多,但是到生成环境,我希望在独立的tomcat容器中运行,因为我们需要对tomcat做额外的优化,这时我们需要将工程打包成war包发进行发布。

    1. 工程的打包方式为war

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

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

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

     发现原来项目中没有配置上面配置,因为我们配置了Springboot,具有依赖传递,因此自动加上上面的配置,我们需要手动配上覆盖依赖传递的配置:

    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包:

     

    打包成功:

    5. 部署到tomcat

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

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

    WEB-INF下面 没有web.xml

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

     (2)启动测试:

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

    (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>

    补充:pom.xml可以设置打成jar包的名字 

    <finalName>icc</finalName>
  • 相关阅读:
    提取 Microsoft.ReportViewer.ProcessingObjectModel.dll Microsoft.ReportViewer.DataVisualization.dll 等dll(转贴)
    Windows API 逐个逐个学(0) MessageBox
    asp程序员使用asp.net中服务器控件的困惑
    SQLServer 存储过程中不拼接SQL字符串实现多条件查询
    工作学习笔记
    c#3.0/3.5 中的一些新特性
    firefox中使用ctrl+0解决了一个调试很长时间的问题
    使用Nunit进行单元测试
    asp.net 用户控件和自定义控件总结
    Visual Studio 2008 无法启动调试.找不到Microsoft Internet Explorer
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/8548690.html
Copyright © 2020-2023  润新知