Spring Boot 2.x 基礎教程:配置文件詳解

Springboot有一個全局配置文件,這個配置文件默認是properties文件,就是application.properties文件,其實還有一種文件,就是yml文件,只不過這種文件是需要自己創建的。這個配置文件是用來修改Springboot的默認配置的。

比如說當我們集成了start-web之後,Springboot默認的web服務器是Tomcat,我們可以對Tomcat的默認配置做一些處理。配置文件能做的事情很多,語法也很簡單。

一、基礎配置

當快速入門示例中,我們創建 Spring Boot 的工程項目時,系統默認會爲我們在 src/main/java/resources 目錄下創建一個application.properties。個人習慣,我會將 application.properties 改爲 application.yml 文件,兩種文件格式都支持。

Spring Boot 的默認配置文件位置爲: src/main/java/resources/application.properties

在application.yml自定義一組屬性:

my:
 name: sanke
 age: 11

與其等價的 properties 配置如下

my.name=sanke
my.age=11

我們需要讀取配置文件的值只需要加 @Value(“${屬性名}”)

@RestController
public class MyController {

    @Value("${my.name}")
    private String name;
    @Value("${my.age}")
    private int age;

    @RequestMapping(value = "/my")
    public String my(){
        return name+":"+age;
    }
}

啓動工程,訪問:localhost:8080/my, 瀏覽器顯示:

sanke:11

二、配置文件的屬性對應實體類

當我們有很多配置屬性的時候,這樣一個個接受非常繁瑣 ,這個時我們就會把這些屬性作爲字段來創建一個 JavaBean,並將屬性值賦予給他們,比如:

my:
 name: sanke
 age: 12
 number:  ${random.int}
 uuid : ${random.uuid}
 max: ${random.int(10)}
 value: ${random.value}
 greeting: hi,i'm  ${my.name}

其中配置文件中用到了 ${random} ,它可以用來生成各種不同類型的隨機值。

怎麼將這些屬性賦於給一個 JavaBean 呢,首先創建一個 JavaBean:

@ConfigurationProperties(prefix = "my")
@Component
public class ConfigBean {

    private String name;
    private int age;
    private int number;
    private String uuid;
    private int max;
    private String value;
    private String greeting;
    
    省略了getter setter....
}

需要加個註解 @ConfigurationProperties,並加上它的 prrfix。另外 @Component 可加可不加。

另外需要在 應用類或者 application啓動類,加 EnableConfigurationProperties 註解。

@EnableConfigurationProperties註解的作用是:使使用 @ConfigurationProperties 註解的類生效。

@RestController
@EnableConfigurationProperties({MyConfig.class})
public class MyConfigController {
    @Autowired
    private MyConfig myConfig;

    @GetMapping("/myConfig")
    public String myConfig(){
        return myConfig.getGreeting()+" >>>"+myConfig.getName()+" >>>"+ myConfig.getUuid()+" >>>"+myConfig.getMax();
    }
}

啓動工程,訪問 localhost:8080/myConfig, 我們會發現配置文件信息讀到了。

三、自定義配置文件

上面介紹的是我們都把配置文件寫到 application.yml 中。有時我們不想把配置都寫到 application 配置文件中,這時我們可以自定義配置文件,比如 my.properties:

com.sanke.name=sanke
com.sanke.age=12

怎麼將這個配置文件信息賦予給一個 JavaBean 呢?

@Configuration
@PropertySource(value = "classpath:my.properties")
@ConfigurationProperties(prefix = "com.sanke")
public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在最新版本的 springboot,需要加這三個註解。@Configuration @PropertySource @ConfigurationProperties

@RestController
@EnableConfigurationProperties({MyConfig.class, User.class})
public class UserController {
    @Autowired
    private MyConfig myConfig;
    @GetMapping(value = "/user/myConfig")
    public String myConfig(){
        return myConfig.getGreeting()+" >>>"+myConfig.getName()+" >>>"+ myConfig.getUuid()+" >>>"+myConfig.getMax();
    }

    @Autowired
    private User user;
    @GetMapping(value = "/user")
    public String user(){
        return user.getName()+ ":" +user.getAge();
    }
}

啓動工程,打開 localhost:8080/user ;瀏覽器會顯示:

sanke:12

四、多個環境配置文件

在實際的開發過程中,我們需要在不同環境下使用不同的配置; 格式爲application-{profile}.properties,其中 {profile} 對應你的環境標識,比如:

application-test.properties:測試環境 application-dev.properties:開發環境 application-prod.properties:生產環境

怎麼使用?只需要我們在application.yml中加:

spring:
 profiles:
   active: test

其中application-dev.yml:

 server:
  port: 8090

啓動工程,發現程序的端口不再是 8080, 而是 8090,表示測試環境已經成功啓用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章