引用

https://blog.csdn.net/Michaelwubo/article/details/81289330
http://blog.didispace.com/spring-boot-learning-21-1-3/

都默认有了set方法

@Value

@Value注入是在spring注入该类的默认构造器之后,再进行set注入的。故会覆盖构造值,且不能直接静态,可通过方法间接注入(建议方法名为:set+属性名,可以不)

  • 普通注入:@Value("fhc")
  • 表达式驱动的的依赖项注入:
    @Value("#{systemProperties['user.name']?:fhc}")
    @Value("#{'fhc'.length()}")
    内部为SpEL,可在内嵌入$ 反之不能。?: 后为默认参数,
  • 属性驱动的依赖项注入:
    @Value("$
    ")
    内部为占位符(PlaceHolder)通常用来注入配置属性,:后为默认参数,配置文件中没有user时默认为fhc
  • 动态解析处理程序方法参数:$ 也许是这个意思?

加载List

通过[]

user[0]=F
user[1]=H
user[2]=C

通过,

user=F,H,C

使用

@Value("${user:fhc}")
public List<String> name;//[]也可

加载Map

user={n:'fhc',g:'male'}

使用

@Value("#{${user}}")
public Map<String,String> name;

@ConfigurationProperties(配置属性)

v2215421592e4bb42ba7e43ebc8b546d6d_r.jpg

加载String

user.name=FHC

使用

@ConfigurationProperties(prefix = "user")
...
public String name;

加载List

之前已写的@value都可以

加载Map

user.user.name=f
user.user.sex=male

使用

@ConfigurationProperties(prefix = "user")
...
public Map<String,String> user;

配置文件加载方式

  • 移除特殊字符
  • 全小写的方式进行匹配和加载
# 等价
spring.jpa.databaseplatform=mysql
spring.jpa.database-platform=mysql
spring.jpa.databasePlatform=mysql
spring.JPA.database_platform=mysql
  • 文档块
    在yml文档中,可以适用---来将一个文档拆分为多个文档块。可以在不同文档块中分别定义不同的环境。
server:
  port: 8082
spring:
  profiles:
    active: dev
---
spring:
  profiles: dev
server:
  port: 8083
---
spring:
  profiles: prod
server:
  port: 8084

多环境配置与加载顺序

spring.profiles.active=div 指明当前系统环境,会自动找到按规范命名的系统环境application-.properties 例:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境

Spring Boot为了能够更合理的重写各属性的值,使用了下面这种较为特别的属性加载顺序:

  1. 命令行中传入的参数。
  2. SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容。
  3. java:comp/env中的JNDI属性。
  4. Java的系统属性,可以通过System.getProperties()获得的内容。
  5. 操作系统的环境变量
  6. 通过random.*配置的随机属性
  7. 位于当前应用jar包之外,针对不同环境的配置文件内容,例如: application-.properties或是YAML定义的配置文件
  8. 位于当前应用jar包之内,针对不同环境的配置文件内容,例如: application-.properties或是YAML定义的配置文件
  9. 位于当前应用jar包之外的application.properties和YAML配置内容
  10. 位于当前应用jar包之内的application.properties和YAML配置内容
  11. 在@Configuration注解修改的类中,通过@PropertySource注解定义的属性
    应用默认属性,使用SpringApplication.setDefaultProperties定义的内容