springboot項目發布到獨立的tomcat中運行

在開發階段我們推薦使用內嵌的tomcat進行開發,因為這樣會方便很多,但是到生成環境,我希望在獨立的tomcat容器中運行,因為我們需要對tomcat做額外的優化,這時我們需要將工程打包成war包發進行發佈。

1. 工程的打包方式為war

springboot項目發佈到獨立的tomcat中運行

2. 將spring-boot-starter-tomcat的範圍設置為provided

設置為provided是在打包時會將該包排除,因為要放到獨立的tomcat中運行,是不需要的。

    
org.springframework.boot
spring-boot-starter-tomcat
provided

發現原來項目中沒有配置上面配置,因為我們配置了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包:

springboot項目發佈到獨立的tomcat中運行

打包成功:

springboot項目發佈到獨立的tomcat中運行

5. 部署到tomcat

  • 第一種:將此項目作為默認項目的部署方式

(1)將war包解壓到webapps下的ROOT目錄中(將原來的ROOT文件夾下面的東西刪除掉),啟動:

springboot項目發佈到獨立的tomcat中運行

WEB-INF下面 沒有web.xml

springboot項目發佈到獨立的tomcat中運行

解釋:上面解壓後的文件沒有web.xml,但是仍能啟動。因為SpringConfig繼承了SpringBootServletInitializer,所以打包的時候spring-boot做了一系列初始化工作(如上面的org文件夾)。

(2)啟動測試:

springboot項目發佈到獨立的tomcat中運行

  • 第二種:將此項目類似於普通的項目進行部署,訪問需要加項目名稱

(1)將打出的war包複製到Tomcat安裝目錄下的webapps目錄下,並將war包重新命名為SSM.war,啟動Tomcat(Tomcat啟動的時候會自動掃描war包並解壓)

springboot項目發佈到獨立的tomcat中運行

(2)啟動測試:

springboot項目發佈到獨立的tomcat中運行

注意:

springboot項目方式不支持用Eclipse的export導出為war包然後部署到tomcat,因為這種Eclipse的Export打出的war包沒有帶springboot所做的初始化工作。打包的東西如下:

springboot項目發佈到獨立的tomcat中運行


分享到:


相關文章: