SpringBoot 多環境配置文件切換

来源:https://www.cnblogs.com/bgyb/archive/2022/03/29/16072713.html
-Advertisement-
Play Games

背景 很多時候,我們項目在開發環境和生成環境的環境配置是不一樣的,例如,資料庫配置,在開發的時候,我們一般用測試資料庫,而在生產環境的時候,我們是用正式的數據,這時候,我們可以利用profile在不同的環境下配置用不同的配置文件或者不同的配置。 解決方案 spring boot允許你通過命名約定按照 ...


背景

很多時候,我們項目在開發環境和生成環境的環境配置是不一樣的,例如,資料庫配置,在開發的時候,我們一般用測試資料庫,而在生產環境的時候,我們是用正式的數據,這時候,我們可以利用profile在不同的環境下配置用不同的配置文件或者不同的配置。

解決方案

spring boot允許你通過命名約定按照一定的格式(application-{profile}.properties)來定義多個配置文件,然後通過在application.properyies通過spring.profiles.active來具體激活一個或者多個配置文件,如果沒有沒有指定任何profile的配置文件的話,spring boot預設會啟動application-default.properties。

一、新建配置文件

註:配置文件優先順序(由高到低):
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

此處使用.yml文件格式,在src/main/resources下新建如下文件

application.yml (主配置)

server:
  port: 9990

spring:
  profiles:
    active: dev #選定配置


#自定義預設值
curvar:
  context: default.curvar

application-pro.yml (開發配置)

#模擬開發配置
curvar:
  context: "開發配置變數"

application-pro.yml(生產配置)

#模擬生產配置
curvar:
  context: "生產配置變數"

二、 服務調用測試

 2.1 新建調用類

@Slf4j
@RestController
public class IndexController {

    @Value("${curvar.context}")
    private String cusvar;

    /**
     * .
     * 使用哪一個配置
     *
     * @return
     */
    @RequestMapping("/test")
    public String test() {
        log.debug("使用:[{}]", cusvar);
        return "使用配置: " + cusvar;
    }

}

2.2 使用樣例項目

打開瀏覽器輸入:http://localhost:9990/test     

三、擴展練習

3.1 使用註解標記配置,首先定義一個介面

public interface Connector {

    String configure();
}

3.2 分別定義倆個實現類來實現它

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;


@Component
@Profile("pro-db")//標記文件,環境切換
public class ProConnector implements Connector {

    @Override
    public String configure() {
        return "pro生產標記文件...";
    }
}
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Profile("dev-db")//標記文件,環境切換
public class DevConnector implements Connector {

    @Override
    public String configure() {
        return "dev開發標記文件...";
    }
}

3.3 修改application.yml文件激活配置

spring:
  profiles:
    #active: dev #選定配置
     active: pro-db #選定配置激活標記文件

3.4 新增查詢方法

   @Autowired
    private Connector connector; //註入

   /**
     * .
     * 使用哪一個被標記文件
     *
     * @return
     */
    @GetMapping("/proFile")
    public String proFile() {
        log.debug("使用配置文件:[{}]", connector.configure());
        return connector.configure();
    }

打開瀏覽器輸入:http://localhost:9990/proFile     

3.5 使用一個或多個配置文件及激活標記文件

3.5.1 修改application.yml文件,進行屬性疊加

spring:
  profiles:
    include: pro,dev-db #指定配置文件及激活標記文件
    #active: pro-db #選定標記文件

3.5.2 新增查詢方法

   /**
     * .
     * 使用哪一個配置文件及標記文件
     *
     * @return
     */
    @GetMapping("/include")
    public String include() {
        return String.format("使用配置文件:%s,使用標記文件:%s", cusvar, connector.configure());
    }

打開瀏覽器輸入:http://localhost:9990/include     

3.6 切換日誌文件

3.6.1 新建logback文件

 

 logback-pro.yml (生產日誌)

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <contextName>logback</contextName>

    <!--定義文件名及存儲路徑-->
    <property name="log.path" value="./pro.log"/>
    <!-- ConsoleAppender:控制台設置 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName  [%thread] %-5level %logger{36} [%file : %line] - %msg%n
            </pattern>
        </encoder>
    </appender>
    <!--RollingFileAppender:滾動記錄文件,先將日誌記錄到指定文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- 每產生一個日誌文件,該日誌文件的保存期限為7天 -->
            <maxHistory>7</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%date %level  [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <!--將上述name名稱:console:標簽名稱為debug-->
    <root level="debug">
        <appender-ref ref="console"/>
    </root>
    <!--將上述name名稱:file:標簽名稱為info-->
    <root level="info">
        <appender-ref ref="file"/>
    </root>
    <logger name="org.springframework.scheduling" level="error"/>
    <Logger name="org.apache.catalina.util.LifecycleBase" level="error"/>
    <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn"/>
    <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn"/>
    <Logger name="org.springframework" level="info"/>
    <Logger name="org.freeswitch.esl" level="warn"/>
    <logger name="java.sql" level="error"/>
    <logger name="org.mybatis" level="info"/><!--mybatis的日誌級別為info-->
    <logger name="com.example" level="debug"/><!--com.hy包下的日誌級別為debug-->
</configuration>

3.6.2 修改application.yml文件,配置日誌屬性

spring:
  profiles:
    #include: pro,dev-db #指定配置文件及激活標記文件
    #active: pro-db #選定標記文件
    active: pro #指定配置文件

#日誌
logging:
   config: classpath:logback-${spring.profiles.active}.xml #本地IDEA啟動配置
   #config: config/logback-${spring.profiles.active}.xml # java -jar 包啟動配置

項目啟動訪問介面,控制台列印日誌

友情提示:jar運行指定配置

java -jar xxx.jar --spring.profiles.active=dev  #指定dev配置

java -jar xxx.jar --server.port=9090 #指定啟動埠

參考鏈接


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 《獵罪圖鑒》可以說是國產懸疑劇之光了,上線首周熱度不斷飆升。該劇講述了因一起塵封舊案而結怨的模擬畫像師沈翊和刑警隊長杜城,在機緣巧合下被迫搭檔,兩人聯手偵破多起離奇疑案,共同追蹤謎底真相的故事。今天就用Python爬取該劇彈幕,做詞雲圖 環境介紹 python 3.8pycharmrequests ...
  • 圖論 圖論是數學的一個分支。它以圖為研究對象。圖論中的圖是由若幹給定的點及連接兩點的線所構成的圖形,這種圖形通常用來描述某些事物之間的某種特定關係,用點代表事物,用連接兩點的線表示相應兩個事物間具有這種關係。 樹 樹是一種數據結構,它是由n(n≥1)個有限節點組成一個具有層次關係的集合。把它叫做“樹 ...
  • 任務要求 把棋盤當作一個稀疏矩陣,0表示沒棋,1表示黑棋,2表示藍棋。 把該稀疏矩陣壓縮以三元組形式表示並以文件形式保存,再寫另一個程式讀取文件中的信息把壓縮後的三元組還原成原來的稀疏矩陣。 其中三元組的第一行用來存儲原始稀疏矩陣的行數、列數和有效的數據個數,其餘行用來存儲有效的非0數據 思路分析 ...
  • 前言 開發環境 python 3.8pycharm 2021.2 專業版 代碼實現 發送請求 獲取數據 解析數據(篩選數據) 保存數據 連接資料庫 對於本篇文章有疑問的同學可以加【資料白嫖、解答交流群:910981974】 開始代碼 請求數據 # 偽裝 headers = { 'cookie': ' ...
  • 一個簡單的Java程式 // HelloJava.java public class HelloJava { public static void main(String[] args) { System.out.println("Hello Java!"); } } Java是區分大小寫的 關鍵字 ...
  • finally的特點 finally:被finally控制的語句體一定會執行 * 註意:如果在執行到finally之前jvm退出了,就不能執行了。 * * A:格式 * try...catch...finally... * B:用於釋放資源,在IO流操作和資料庫操作中會見到 package cn.i ...
  • 練習: 存儲學生對象並遍歷,創建TreeSet集合使用無參構造方法,並按照年齡從小到大的順序排序,若年齡相同再按照姓名的字母順序排序 分析: 1.創建學生類,成員變數name,age;無參構造,帶參構造;get\set方法; 2.創建測試類,添加數據併進行排序;直接排序會報錯 3.需要Student ...
  • 過濾器就是過濾條件,對已經定位到數組中的 DOM 對象進行過濾篩選,過濾條件不能獨立出現在 jquery 函數,如果使用只能出現在選擇器後方 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...