1. 程式人生 > >SpringBoot 不同環境讀取不同的配置資訊檔案

SpringBoot 不同環境讀取不同的配置資訊檔案

在實際開發中,本地開發、測試服務、正式服務的配置資訊有的地方是不一樣的;比如本地測試log級別可能是debug,而正式環境下則為info;再比如資料庫的配置,正式環境下和測試環境下是不一樣的。以前我們通過手動更改這些配置來完成測試到正式的轉移,但這樣做還是有一定的風險,如果手動配置錯誤,則會導致很多錯誤。

Springboot給我們提供了一種方式,能夠自動的切換正式環境配置及測試環境配置,下面就用一個小例子來演示一下如何進行配置資訊的切換。

1、專案結構

這裡寫圖片描述

上面這張圖是這個小例子專案的結構,通過Maven來構架出一個Springboot專案:
1. Application.java : 這個檔案是Springboot的啟動類,專案的啟動是執行這個檔案中的main方法。
2. HelloController.java : 這個檔案是我們測試的一個請求Controller。
3. application.properties : Springboot專案啟動讀取的配置資訊檔案。
4. application-release.properties : 正式環境下使用的配置資訊檔案。
5. application-stage.properties : 測試環境下使用的配置資訊檔案。
6. logback-dev.xml : 正式環境下的log配置檔案。
7. logback-stage.xml : 測試環境下的log配置檔案。

2、配置檔案

2.1 application.properties

# 服務埠
server.port=8081
# 啟用哪個環境下的配置
spring.profiles.active=stage

Springboot的啟動檔案中這裡我們只放置了兩項配置,在實際使用中,該檔案放置一些正式環境、測試環境都會用到的共同配置資訊即可;這裡著重講解一下spring.profiles.active,這個配置項主要用於告訴服務使用哪個環境的配置,值為application-{profile}.properties 格式檔案中的profile值,我們這個專案中值為:release、stage。

2.2 application-dev.properties

# 日誌配置
logging.config=classpath:logback-release.xml

# 正式資料庫配置
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = 000000
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8 spring.datasource.min-idle=8 spring.datasource.initial-size=10

該檔案是正式環境下使用的配置資訊檔案,這裡我們配置了使用的log日誌配置檔案、資料庫配置。

2.3 application-stage.properties

# 日誌配置
logging.config=classpath:logback-stage.xml

# stage資料庫配置
spring.datasource.url = jdbc:mysql://localhost:3306/test_2
spring.datasource.username = root
spring.datasource.password = 000000
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

該檔案是測試環境下使用的配置資訊檔案,這裡我們配置了使用的log日誌配置檔案、資料庫配置。

3、啟動類

@SpringBootApplication
@Controller
@ComponentScan(basePackages={"com.test.spring.boot.controller"})    //自定義自動掃描
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@ComponentScan(basePackages={“com.test.spring.boot.controller”}) 這行配置資訊含義是:設定了自動掃描的包路徑,即會掃描controller包下的bean,若有多個掃描包路徑,可以以逗號分隔。

4、測試

4.1 HelloController

@RestController
public class HelloController {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello " + getUsername();
    }

    private String getUsername() {
        String url = "select * from tb_user where id = ?";
        UserBean userBean = jdbcTemplate.query(url, new Object[]{1}, new ResultSetExtractor<UserBean>(){
            @Override
            public UserBean extractData(ResultSet resultSet) throws SQLException, DataAccessException {
                UserBean bean = new UserBean();
                while(resultSet.next()) {
                    bean.setId(resultSet.getInt("id"));
                    bean.setUsername(resultSet.getString("username"));
                    bean.setPhone(resultSet.getString("phone"));
                }
                return bean;
            }
        });
        return userBean.getUsername();
    }
}

這個Controller實現了一個REST的請求,訪問 http://localhost:8081/hello可以請求到該Controller中,並訪問資料庫,查詢到使用者名稱,返回到客戶端。

我們通過修改spring.profiles.active引數,訪問測試資料庫、正式資料庫,以此來驗證是否切換了不同的環境配置檔案。

4.2 開始測試

正式資料庫中使用者名稱為:test_1,測試資料庫中使用者名稱為:test_2

這裡寫圖片描述

這裡寫圖片描述

大家可以動手測試測試,spring.profiles.active這個配置項不僅可以在application.properties檔案中進行配置,還可以通過 java -jar 啟動服務時新增到後面作為啟動引數;這樣也能夠告訴服務使用哪個配置檔案。