SpringBoot学习笔记(二):YAML在SpringBoot的作用和机制

一、属性加载顺序

Spring Boot外化(externalize) 你的配置,这样你能在不同的境下使用相同的代。 你可以使用properties文件,YAML文件,量和命令行参数来外化配置。 使用@Value注解, 可以直接将属性注入到你的beans中, 并通SpringEnvironment抽象或定到结构象来访问

Spring Boot使用一个非常特PropertySource次序来允许对值进行合理的覆盖, 需要以下面的次序考属性:

1.命令行参数java -jar ***.jar--spring.config.name=myproject.properties

2.来自于java:comp/envJNDI属性

3. Java属性(System.getProperties()

4.操作系统环

5.只有在random.*里包含的属性会生一个RandomValuePropertySource

6.在打包的jar外的用程序配置文件(application.properties, 包含YAMLprofile量)

7.在打包的jar内的用程序配置文件(application.properties, 包含YAMLprofile量)

8.@Configuration上的@PropertySource注解

9.属性( 使用SpringApplication.setDefaultProperties指定)


二、Application属性文件

SpringApplication将从以下位置加application.properties文件, 并把它添加到Spring Environment中:

1.当前目下的一个/config子目

2.当前目

3.一个classpath下的/config

4. classpath根路径(root

个列表是按排序的( 列表中位置高的将覆盖位置低的) 。

注:你可以使用YAML'.yml') 文件替代'.properties'

如果不喜application.properties配置文件名, 你可以通指定spring.config.name境属性来切其他的名称。你也

可以使用spring.config.location境属性来引用一个明确的路径(目位置或文件路径列表以逗号分割) 。

$java -jar myproject.jar --spring.config.name=myproject

//or

$java -jar myproject.jar--spring.config.location=classpath:/default.properties,classpath:/override.properties

如果spring.config.location包含目( 相于文件), 那它们应该/尾( 在加前,spring.config.name生的名称将被追

加到后面) 。 不管spring.config.location是什么, 默的搜索路径classpath:,classpath:/config,file:,file:config/会被使用。

种方式, 你可以在application.properties为应置默认值, 然后在行的候使用不同的文件覆盖它, 同保留默

配置。

注:如果你使用量而不是系配置, 大多数操作系不允以句号分割(period-separated) 的key名称, 但你可以使

用下划线underscores) 代替( 比如, 使用SPRING_CONFIG_NAME代替spring.config.name) 。 如果你的行在一

个容器中, 那么JNDI属性(java:comp/env) 或servlet上下文初始化参数可以用来取代量或系属性,当然也可以使

量或系属性


三、属性的解析

1、除了application.properties文件, 特定配置属性也能通命令application-{profile}.properties来定。 特定Profile属性从跟
application.properties相同的路径加, 并且特定profile文件会覆盖默的配置。

2、application.properties里的被使用, 它会被存在的Environment过滤, 所以你能引用先前定( 比如, 系
性) 。
app.name=MyApp
app.description=${app.name} is a Spring Boot application

也能在Bean中直接使用@Value

3、YAMLJSON的一个超集, 也是一种方便的定义层次配置数据的格式。 无你何SnakeYAML放到classpath下,
SpringApplication都会自支持YAMLproperties的替
注:如果你使用
'starter POMs'spring-boot-starter会自提供SnakeYAML 

4、可以直接使用@Value注入到bean中

5、你可以在个文件中定多个特定配置(profile-specific) 的YAML文档, 并通一个spring.profiles key用的文档。 例
如:
#default

server:
  address:
192.168.1.100
#--development profile 
spring:
  profiles: development
server:
    address:
127.0.0.1
#---production profile
spring:
  profiles: production
server:
  address:
192.168.1.120
在上面的例子中, 如果development配置被激活, 那server.address属性将是127.0.0.1。 如果developmentproduction配置
profiles) 没有用,则该属性的将是192.168.1.100


6、application.properties和application.yml的区别是yml不能被@PropertySource注解加载


四、自动载入外化属性到Bean(Boot更推荐的方式)

1、当@EnableConfigurationProperties注解用到你的@Configuration, 任何被@ConfigurationProperties注解的beans将自
Environment属性配置。 格的配置特适合与SpringApplication的外部YAML配置行配合使用。

了使用@ConfigurationProperties beans, 你可以使用与其他任何bean相同的方式注入它 

可以在@ConfigurationProperties中指明prefix,定义你的映射规则,简化配置

2、你可以通@EnableConfigurationProperties注解中直接简单的列出属性来快捷的注册@ConfigurationProperties bean
的定

3、正如使用@ConfigurationProperties注解一个, 你也可以在@Bean方法上使用它。 当你需要定属性到不受你控制的第三
种方式非常有用

4、Spring Boot使用一些松的规则用于Environment属性到@ConfigurationProperties beans, 所以Environment属性名和
bean属性名不需要精确匹配。 常的示例中有用的包括虚线分割( 比如, context--path定到contextPath) 和将境属性
大写字母( 比如, PORTport) 

5、Spring尝试制外部的用属性在定到@ConfigurationProperties beans时类型是正确的。 如果需要自定义类转换, 你
可以提供一个
ConversionService beanbean idconversionService) 或自定属性编辑器( 通一个
CustomEditorConfigurer bean

6、校验:Spring Boot尝试外部的配置, 默使用JSR-303( 如果在classpath路径中) 。 你可以松的你的
@ConfigurationProperties添加JSR-303 javax.validation束注解 ,你也可以通过创建一个叫做configurationPropertiesValidatorbean来添加自定Spring Validator

你可能感兴趣的:(Java)