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).
@TestPropertySource annotations on your tests.
@SpringBootTest#properties
Command line arguments.
Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variableor system property)
ServletConfig init parameters.
ServletContext init parameters.
JNDI attributes from java:comp/env.
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