Spring Boot & 配置

weixin_33797791發表於2018-08-05

簡介

首先是理解以下配置,配置可以簡單的理解成配置bean。平時寫程式碼如果不考慮擴充套件性的話,很多的配置資訊都寫死在了程式碼裡面(要修改就比較麻煩)。配置就可以狹義的理解成將一些屬性,常量等放到一個配置檔案裡面去。
spring boot 的配置方式比較多,我們先講講常見的方式。比較常見的方式就是classpath下面的application.properties,spring boot 會載入這個配置檔案。
對待配置也要有理智的認識,配置就是為了使用配置,而不是為了配置而配置

建立配置

  • 在classPath下面建立一個 application.properties 檔案
    4203910-1081ecd9e8627bd6.png
  • 新增一些配置(配置是以鍵值對的形式新增)


    4203910-69014331e0c32df8.png


使用配置(這個才是最重要的)

  • 使用註解的形式 @Value(這裡可以理解成 SPEL 表示式)
@SpringBootApplication
@RestController
public class App {

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

    @Value("${number}")
    private String number;

    @Value("${user.firstname}")
    private String firstName;

    @RequestMapping("/")
    public String showProperInfo(){
        return firstName+name+" "+number;
    }
    public static void main(String[] args){
        SpringApplication.run(App.class,args);
    }
}
  • 使用 Java 程式碼來取
@SpringBootApplication
@RestController
public class App {

    @Autowired
    Environment environment;

    @RequestMapping("/")
    public String showProperInfo(){
        String firstName = environment.getProperty("user.firstname");
        String name = environment.getProperty("name");
        String number = environment.getProperty("number");
        return firstName+name+" "+number;
    }

    public static void main(String[] args){
        SpringApplication.run(App.class,args);
    }
}
  • 自動裝配到Java類的屬性,註解@ConfigurationProperties(spring boot的自動裝配的bean基本都是使用這種方式實現)。可以理解成以一種模式來裝配
    • 修改一下配置資訊


      4203910-5534a26a5b4f717d.png
    • 註解配置,ConfigurationProperties 配置一個字首,配置檔案裡面的屬性就可以和字首對映起來(注意這裡要配置的屬性需要get 和 set 方法)
@SpringBootApplication
@RestController
@Configuration
@ConfigurationProperties(prefix = "my.setting")
public class App {

    private String name;
    private String number;

    @RequestMapping("/")
    public String showProperInfo(){
        return name + "  " + number;
    }

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

    public String getName() {
        return name;
    }

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

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}


Application.properties的其他功能

  • 屬性之間的引用,配置的屬性可以引用其他配置屬性(可以簡單的理解成文字替換)


    4203910-f7cee1764807cd48.png
  • 隨機數支援


    4203910-5d5ecf6fb69fa267.png


不同配置之間的切換

  • 有時候有這樣的需求,測試的時候是一個配置,開發的時候是一個配置
  • 按照一定的規律建立多個配置檔案,通過啟用不同的配置檔案來實現不同配置之間的切換


    4203910-0ca1c1e929002fbb.png
  • 通過spring.profiles.active屬性啟用不同的配置,如果要啟用application-dev.properties就使用spring.profiles.active=dev。如果要啟用application-pro.properties就使用spring.profiles.active=pro。這個屬性可以配置多個(spring.profiles.active=pro,dev)


    4203910-3a70a537b643cf0a.png


條件化配置

  • 使用場景是有一些bean在測試的時候需要註冊,有些bean僅僅在生產環境註冊
  • spring 提供了@Profile註解來條件化配置,這個註解是和上面配置的spring.profiles.active屬性一起使用的,比如如果@Profile("dev")對應的bean或者配置類就僅僅是在spring.profiles.active中有dev是被初始化
  • 任何使用了@Component 和 @Configuration註解的類都可以使用Profile註解
@Configuration
@Profile("dev")
public class ProductionConfiguration {

}

 


End

[2]  using spring boot
[1]  spring boot mvc

相關文章