spring boot實現不同生產環境下的檔案設定

2022-07-30 15:00:25

設定不同生產環境

本文適用於開發環境下需要打包專案至生產環境,避免開發環境的組態檔洩露。

設定maven

作用:1. 手動調節執行時的不同環境 2. 打包時可以不會有其它環境的檔案

注:每次換環境前(打包前)記得手動clean清楚,因為idea不會在換環境後自動清除另一個環境的檔案

在pom檔案中加

  • 在依賴前加

    <!--分別設定開發,生產環境-->
    <profiles>
        <!-- 開發環境 -->
        <profile>
            <id>dev</id>
            <activation>
                <!--設定預設為dev環境-->
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <environment>dev</environment>
            </properties>
        </profile>
        <!-- 生產環境 -->
        <profile>
            <id>prod</id>
            <activation>
                <!--不設定該環境為預設環境-->
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <environment>prod</environment>
            </properties>
        </profile>
    </profiles>
    
  • 標籤中放該程式碼

    <resources>
    <!--排除組態檔-->
        <resource>
            <directory>src/main/resources</directory>
            <!--先排除所有的組態檔-->
            <excludes>
                <!--使用萬用字元,當然可以定義多個exclude標籤進行排除-->
                <exclude>application*.yaml</exclude>
            </excludes>
        </resource>
    
        <!--根據啟用條件引入打包所需的設定和檔案-->
        <resource>
            <directory>src/main/resources</directory>
            <!--引入所需環境的組態檔-->
            <filtering>true</filtering>
            <includes>
                <include>application.yaml</include>
                <!--根據maven選擇環境匯入組態檔-->
                <include>application-${environment}.yaml</include>
            </includes>
        </resource>
    </resources>
    

設定三個yaml

application.yamlapplication-dev.yaml application-prod.yaml

//application.yaml

//方法一:弊端(打包時會把dev 和 prod環境的組態檔都會打包),無法真正做到多環境開發
spring:
  profiles:
    active: dev	//這裡是寫組態檔命名-後的單詞
    
//方法二:通過maven來告訴springboot應該打包哪個環境的檔案(優點:不會包含其他環境的組態檔)
spring:
  profiles:
    active: '@environment@'  #這裡的單詞要手動打,等有提示才行,不然會失敗。注意YAML組態檔需要加單引號,否則會報錯。
//application-dev.yaml

server:
  port: 8080
//application-prod.yaml

server:
  port: 80

注意:

如果有設定紀錄檔列印,想要不同環境紀錄檔列印不同需要去紀錄檔列印的組態檔改這些:把上面上部分改成下部分

			<root level="INFO">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="FILE"/>
            </root>
------------------------------------------------------------------
		<!--dev環境下的紀錄檔輸出方式-->
        <springProfile name="dev">
            <root level="INFO">
                <appender-ref ref="CONSOLE"/>
                <appender-ref ref="FILE"/>
            </root>
        </springProfile>
    
        <!--prod環境下的紀錄檔輸出方式-->
        <springProfile name="prod">
            <root level="INFO">
                <appender-ref ref="FILE"/>
            </root>
        </springProfile>