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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM