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>
相關文章
相關標籤/搜索