Springboot2專案配置(熱部署+war+外部tomcat+外部配置檔案)
很多人在學習springboot時感嘆於它便捷的自動化配置、內建tomcat、jar包啟動,當然,這是我們很多人轉用boot開發的原因。但是,在有些場景下或者實際工作中,往往有很多原因使我們陷入困擾,比如將boot的jar交給docker部署,比如我們是舊的專案改造,比如我們的配置檔案是外部平臺來管理,比如我們必須用外部tomcat來執行等等,經常使我們有些初入坑的同學感到頭疼。當然,這些問題對於springboot來說都不是問題。springboot除了可以在application.properties配置外,其實是將很多配置交給了程式碼來管理,我們可以通過繼承配置類或者實現配置介面來進行很多的自定義開發方案實現。
本文主要記錄一下幾種定製化配置
- 開發/測試/生產多環境配置檔案切換
- 將springboot打成war包
- 在IDEA中用外部tomcat執行部署
- 通過啟動環境變數讀取配置檔案
- IDEA下配置設部署,提高開發效率
環境介紹
- OS:windows10
- IDE:IDEA2017.2
- JDK:1.8
- MAVEN:3.5
一、開發/測試/生產多環境配置檔案切換
如圖,在application配置檔案外新建n個字尾自定義的配置檔案,然後在application中方不經常變化的預設的系統配置,在新建的配置
檔案中放例如像資料庫連線這類的需要切換環境的配置;
在application中通過spring.profiles.active=dev可以自由切換不同的環境
二、將springboot打成war包,並用外部tomcat執行部署
首先上pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>com-jum-demo</artifactId>
<packaging>war</packaging>
<parent>
<groupId>com.jum.demo</groupId>
<artifactId>jum-base</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath/>
</parent>
<dependencies>
<!-- 其他你必須的 或者 可能需要的依賴-->
<!-- tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- spring boot 打包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 如果是war包 並且配置外部配置引數 則打包時可以選擇要忽略的配置檔案 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>
WEB-INF/classes/application.properties
</packagingExcludes>
</configuration>
</plugin>
</plugins>
<finalName>demo</finalName>
</build>
</project>
在pom中排除不打進war的配置檔案,指定打包型別為war
然後,修改啟動類
package com.jum;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.WebApplicationInitializer;
/**
* @author zhoujumbo
*
*/
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(DemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
配置外部tomcat
左上角“
+
”號新增tomcat>local
,右側皮膚上部,設定自定義名稱(這個名稱值是自己給tomcat起的名字,隨便都可以)
Application server
設定自己的tomcat安裝根路徑
VM
引數選填
儲存
進入皮膚上部tab頁Deployment
如上圖,選第一個
Artifacts
這一步,右側的
Application context
是你專案啟動時候到名字
啟動tomcat
三、通過啟動環境變數讀取配置檔案
基本配置沿用標題二中的基本配置,在此基礎上
在任意java包路徑下建立任意名稱的類(儘量符合你專案的規範),加入如下程式碼:
package com.jum.config;
import org.omg.CORBA.PRIVATE_MEMBER;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
/**
* 讀取外部配置檔案
*/
public class ExternalProperties implements EnvironmentPostProcessor {
private Logger logger = LoggerFactory.getLogger(getClass());
private static final String LOCATION = "application.properties";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
logger.info("系統引數>>>"+System.getProperty("DEMO-HOME-CONFIG"));
File file = new File(System.getProperty("DEMO-HOME-CONFIG"), LOCATION);
if (file.exists()) {
MutablePropertySources propertySources = environment.getPropertySources();
logger.info("Loading local settings from {}" , file.getAbsolutePath());
Properties properties = loadProperties(file);
propertySources.addFirst(new PropertiesPropertySource("Config", properties));
}
}
private Properties loadProperties(File f) {
FileSystemResource resource = new FileSystemResource(f);
try {
return PropertiesLoaderUtils.loadProperties(resource);
}
catch (IOException ex) {
throw new IllegalStateException("Failed to load local settings from " + f.getAbsolutePath(), ex);
}
}
}
注意,
DEMO-HOME-CONFIG
是預設指定的要在環境變數中設定的啟動引數名稱,可以定義設定;
然後配置專案啟動引數:-DDEMO-HOME-CONFIG=D:\temp\config_spaces\
注意:啟動引數前是有-D
符號的
在
resources
下建立資料夾META-INF
,新增檔案spring.factories
,新增內容org.springframework.boot.env.EnvironmentPostProcessor=com.jum.config.ExternalProperties
完成
四、IDEA下配置熱部署,提高開發效率
涉及到的幾個點
- 設定選單中設定自動編譯
2. 引入devtools相關依賴包,並進行外掛引數配置
<!--熱部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- 外掛出配置 -->
<build>
<finalName>xxx</finalName>
<plugins>
<!-- spring boot 打包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--fork : 如果沒有該項配置,肯定devtools不會起作用,即應用不會restart -->
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
- 如果是war包部署,必須在伺服器設定中進行如下選擇
- 開啟idea系統配置,勾選自動編譯選項。在介面按“shift+ctrl+alt+/”
找到“compiler.automake.allow.when.app.running” 勾選,然後close。 - 如果是springboot,在配置檔案加上相關引數配置
#熱部署配置 僅開發環境用
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=resources/**,static/**,basepages/**
spring.devtools.restart.additional-exclude=error/**
#說明:spring.devtools.restart.additional-paths:由於devtool預設是不會監聽靜態資源的,此處將boot下的靜態目錄配置上,
# 其中basepages是自己後來自定義設定的靜態目錄,可不加或者配置成你自己的
END
相關文章
- 配置springboot專案使用外部tomcatSpring BootTomcat
- 03.MyBatis學習-----全域性配置檔案_properties_引入外部配置檔案MyBatis
- springboot 專案部署到外部tomcatSpring BootTomcat
- springboot 執行 jar 包讀取外部配置檔案Spring BootJAR
- Spring Boot專案部署到外部TomcatSpring BootTomcat
- SpringBoot2配置檔案application.yamlSpring BootAPPYAML
- SpringBoot配置外部Tomcat專案啟動流程原始碼分析(長文)Spring BootTomcat原始碼
- 熱更新配置檔案
- SpringBoot外部化配置Spring Boot
- Spring Boot讀取外部配置檔案失敗,原因絕對出乎你意料Spring Boot
- Springboot整合外部Tomcat配置Spring BootTomcat
- SpringBoot中配置外部TomcatSpring BootTomcat
- SpringBoot 之配置外部TomcatSpring BootTomcat
- Golang 專案之配置檔案Golang
- SpringBoot專案配置檔案加密Spring Boot加密
- java專案日誌配置檔案Java
- [Golang]呼叫外部shell程式處理檔案Golang
- SpringBoot外部化配置使用Plus版Spring Boot
- SpringBoot的外部化配置最全解析!Spring Boot
- SpringBoot配置外部Tomcat並支援JSPSpring BootTomcatJS
- SpringBoot專案中獲取配置檔案的配置資訊Spring Boot
- SpringBoot專案配置檔案佔位符Spring Boot
- 釋出nuget 如何配置專案檔案
- application.yml檔案配置springboot專案APPSpring Boot
- Golang專案中讀取配置檔案Golang
- Git配置配置檔案Git
- maven專案打包後war檔案丟失配置檔案Maven
- 動態引用外部的Javascript指令碼檔案JavaScript指令碼
- 如何在Rust程式專案中安全地使用外部或是專案目錄下的檔案?Rust
- 使用springboot建立web專案,並使用外部TomcatSpring BootWebTomcat
- Spring Boot 外部化配置實戰解析Spring Boot
- # Spring Boot 外部化配置實戰解析Spring Boot
- SpringBoot配置外部Tomcat並打war包Spring BootTomcat
- Spring Boot外部化配置實戰解析Spring Boot
- 【SSM框架整合】專案xml檔案、properties等檔案的配置SSM框架XML
- vuepress專案 配置/使用/部署 markdown語法Vue
- SpringBoot專案熱部署Spring Boot熱部署
- Maui 讀取外部檔案顯示到Blazor中UIBlazor