1. 程式人生 > >SpringBoot系列-1新特性:配置程式碼化

SpringBoot系列-1新特性:配置程式碼化

與精通spring boot的磊神交流,他極力推薦spring boot的原因,也是spring改進之處,是不用寫大量的xml。

我們知道以前在使用spring的時候,一般都會用註解生成bean,但是有些情況下不得不使用xml配置bean,比如我們經常在application.xml中配置資料庫連線源datasource,在xml中指定db資料來源url/name/password等。但是用spring boot後,我們可以直接在程式碼中使用配置檔案(application.properties或者application.yaml)的配置

1.在程式碼中為bean設定配置檔案中的值

@Component
public class Test {

    @Value("${userNameP}")
    private String userName;
}

然後只需要在application.properties定義userNameP=sssss,或者application.yaml中定義userNameP:sssss.注意冒號後面要有一個空格。

 一般情況,我們通過別的途徑獲取引數的時候,都會在程式碼中設定預設值,防止引數不存在而造成異常。設定預設值的方式如下,只需要在新增":預設值"。

@Component
public class Test {

    @Value("${userNameP:xtj332}")
    private String userName;
}

預設情況程式會從application.properties或者application.yaml自動查詢配置的值,但是我們也可以指定配置檔案的所在。如下:


2.ConfigurationProperties


3.配置讀取順序

spring boot讀取配置的順序如下:

      1.Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).

  1. @TestPropertySource annotations on your tests.

  2. @SpringBootTest#properties

    annotation attribute on your tests.

  3. Command line arguments.

  4. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variableor system property)

  5. ServletConfig init parameters.

  6. ServletContext init parameters.

  7. JNDI attributes from java:comp/env.

  8. Java System properties (System.getProperties()).

     10.OS environment variables.

     11.A RandomValuePropertySource that only has properties in random.*.

     12.Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)

     13.Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)

     14.Application properties outside of your packaged jar (application.properties and YAMLvariants).

    15.Application properties packaged inside your jar (application.properties and YAML variants).

     16.@PropertySource annotations on your @Configuration classes.
     17.Default properties (specified using
SpringApplication.setDefaultProperties).

對我們來說,最容易出錯的地方是,雖然我們使用@PropertySource("classpath:mail.properties")指定檔案的位置,但是如果application.yaml中有設定值的話,首先會取application.yaml中的值。

4.隨機數

   spring boot支援在配置檔案中使用隨機值,支援Long  int  uuid string等。使用方法很簡單,如下:

my.secret=${random.value}
my.number=${random.int} 
my.bignumber=${random.long}
my.uuid=${random.uuid} 
my.number.less.than.ten=${random.int(10)} 
my.number.in.range=${random.int[1024,65536]}

5.在配置檔案中使用佔位符

app.name=MyApp
app.description=${app.name} is a Spring Boot application

6.使用yaml檔案替代Properties

  TheYamlPropertiesFactoryBeanwillloadYAMLasPropertiesandtheYamlMapFactoryBeanwillload YAML as a Map.

   yaml的不足之處:yaml檔案不能通過@PropertySource註解得到,因此如果需要使用@PropertySource註解,需要用peoperties檔案。

7.跨域支援

@Configuration
public class MyConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**");
  }
 } 
}
8.



    

 app.name=MyApp
app.description=${app.name} is a Spring Boot application