1. 程式人生 > >SpringBoot學習筆記——Spring Boot配置檔案

SpringBoot學習筆記——Spring Boot配置檔案

    SpringBoot工程建立時會自動生成application.properties檔案,這個檔案專門存放配置資訊。

    但是目前預設的配合檔案已經不能滿足我了,需要自己配置一些資訊。

    第一、application.properties有一些預設的也是固定的屬性和引數,不能改,但是我需要加入自己的配置資訊。

    第二、專案上線之時程式碼已經編譯,都是.class檔案,沒法修改。但是通過一些工具(我推薦WinSCP),專案的配置檔案是可以修改的。有時出現的一些小問題不值得停機修改java檔案,修改一下配置檔案就可以了。

一、自定義屬性

    1. 新建SpringBoot專案,application.propeerties中增加自定義屬性。

server.port=8888
        
#自定義配置資訊
byk.name=hanleilei
byk.age=18
byk.salary=999999
byk.professional=farmers

    2. 使用@Value標籤把屬性注入到需要的程式碼上。

@RestController
public class HomeController {

    @Value("${byk.name}")
    private String name;

    @Value("${byk.age}")
    private int age;

    @Value("${byk.salary}")
    private String salary;

    @Value("${byk.professional}")
    private String professional;

    @GetMapping(value = "/hello")
    public String hello(){
        return "我是"+name+",我現在"+age+"歲,職業"+professional+",我期望薪資是"+salary;
    }
}

二、將配置檔案的屬性賦給實體類

    1. 需要配置的屬性很多的時候,可以把這些屬性作文一個欄位來建立一個javabean,並且將屬性賦值給他們。

server.port=8888

#自定義配置資訊
byk.name=hanleilei
byk.age=18
byk.salary=999999
byk.professional=farmers
byk.msg=hello,i'm ${byk.name}
byk.num=${random.int(100)}
#random.int(100)隨機生成100以內的數字
    2.  引入依賴包。
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>
    3. 新建People.java,加上@Component和 @ConfigurationProperties標籤。
@Component
@ConfigurationProperties(prefix = "byk")  //配置檔案中屬性的字首
public class People {

    private String name;
    private int age;
    private String salary;
    private String professional;
    private String msg;
    private int num;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    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;
    }

    public String getSalary() {
        return salary;
    }

    public void setSalary(String salary) {
        this.salary = salary;
    }

    public String getProfessional() {
        return professional;
    }

    public void setProfessional(String professional) {
        this.professional = professional;
    }
}

4. 新建PeopleContrller,加上@EnableConfigurationProperties。如下:

@EnableConfigurationProperties({People.class})
@RestController
public class PeopleContrller {


    @Autowired
    People people;

    @RequestMapping("/people")
    public String people(){
        return people.getMsg()+",我今年"+people.getAge()+",我的學號是"+people.getNum()+",我的希望薪資是"+people.getSalary();
    }
}


    三、自定義配置檔案

    需要配置的資訊過多的時候,不願意把所有的資訊都寫在application.properties檔案裡。

    1. 我們可以自定義一個my.properties,如下:

student.name=LiLei
student.age=18
student.id=10086

    2. 新建Student.java。加@PropertySource和@ConfigurationProperties。

@Configuration
@PropertySource(value = "classpath:my.properties")   //指定配置檔案
@ConfigurationProperties(prefix = "student") //屬性的字首
public class Student {

    private String name;

    private int age;

    private  int  id;

    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;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
    3. 新建StudentController。
@RestController
//@EnableConfigurationProperties({StudentController.class})
public class StudentController {

    @Autowired
    Student student;

    @RequestMapping("/student")
    public String student(){
        return "我是"+student.getName()+",現在"+student.getAge()+",學號是"+student.getId();
    }
}

    四、不同環境下的配置檔案

    專案的不同開發階段有不同的配置資訊,比如資料庫連結資訊,開發階段連線本機的資料庫就可以,上線以後連線雲資料庫。具體如下:

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

1. 具體的使用也很簡單,在application.properties中加:

spring.profiles.active=dev
2. 新建application-dev.properties檔案:
server.port=9999

    

五、一些坑

    不能算坑,只是有些不明白。    

    1. 網上的原文說@Component可加可不加,spring-boot-configuration-processor包可引可不引,但是我加不引報錯。

    2.網上原文在每個Controller上面加了@EnableConfigurationProperties,但是我這裡加不加都不影響功能。

六、感謝大牛