springboot 两种配置文件,application.properties ,application.yml ,注入值的两种方式,主动@ConfigurationProperties与被动@value,和其他注解Conditional,PropertySource
两种配置可以互补,yml的优先级高于properties。
常用的是 prefix,前缀的声明。 @ConfigurationProperties注解里面的。
在注解中,如果一个类,上面声明了 @ConfigurationProperties(prefix = "studuent"),则在application.properties中,以student开头的字段,会自动注入到本类中
@ConfigurationProperties,既可以用在配置类上,也可用在bean上。
@Data @AllArgsConstructor @NoArgsConstructor @ToString //@Component @ConfigurationProperties(prefix = "user") public class User { private Integer id; private String name; private String address; }
@Configuration public class UserConfig { @Bean @ConfigurationProperties(prefix = "user") public User user() { return new User(1,"xiaoming","beijing" ); } }
application.properties
在pom文件中,alt + 反斜线,调出edit starts
然后选择spring-boot-configuration-processor,可以帮助在配置文件中,出现提示。如输入user,点,会提示id,name等等
server.port=80
user.id = 11111
user.name=xiaoming
user.user-name = liming // 如果有驼峰,自动改为中杠
user.hobby=LOL,DNF,GAME //数组
user.lists=GAME,BOOK,EAT //list 起的名字是lists,非必须是lists
user.maps.k1=v1 //map
user.maps.k2=v2
user.sets=LOL,DNF,LOL,DNF //set
#user.birth.time = 111111123423434
user.birth = 2021/2/4 20:28:30 //日期
另外的一个配置文件 application.yml
他的优先级比properties的高,因为是后加载的原因
如果在更改了配置文件,不起作用的情况下,查看maven的信息,可能爆红,需要更新一下maven
Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed. (org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources:default-resources:process-resources)
org.apache.maven.plugin.PluginExecutionException: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed.
注意在冒号后,有空格。如果颜色提示异常,注意检查格式。
server:
port: 9999
user:
address: xxtt
hobby:
- LOZ
- LO
- DNF
birth:
2020/2/4 22:10:9
sets:
- gaoset1
- gaoset2
- gaoset1
lists:
- list1
- list2
maps:
k1: v1
k2: v2 //注意冒号后有空格
支持占位符
user:
address: xxtt
# id: ${random.int}
id: ${random.int(1,100)} //可以中括号或者小括号
hobby:
- LOZ
- LO
- DNF
- ${user.address}
- ${a}
a: aaaaa
-------------------------------
主动注入@value,
在appllication.properties文件中
server.port=8111
user.id=555
在bean中,取消掉主动注入@ConfigurationProperties
@Data @AllArgsConstructor @NoArgsConstructor @Component //@ConfigurationProperties(prefix = "user") public class User { @Value("${user.id}") private Integer id;
也支持random等表达式,但不支持高级属性,如数组,集合,列表等
如果是驼峰命名,需要用中杠线
支持el表达式,即以#开头,而不是$开头。
另外的重要注解
@PropertySource("classpath:student.properties") ,
如果properties的名字不是默认名字的情况下,引入配置文件。此例中位置和默认的并排位置,可以加载在类或者启动入口都可以,只要是容器能扫描到的地方都可以。如果互存的情况下,系统默认的要高于自定义的配置文件
@ImportResource(value={"classpath:beans.xml"})
用来引入系统中的xml配置文件。位置在启动类,或者被容器创建的类上。不能在原始bean类上。
@Bean 和 @Qualifier,一起用,@Bean需要指明value,如@Bean("teacher1")
@Profile(value=“dev”),当存在多个配置文件时,指定哪一个为当前配置文件
如application-dev.properties
在 application.properties 中,输入 debug = true 可以查看哪些配置类是否生效
---------------------
Conditional 注解,提示满足什么条件
如:
ConditionalOnJava
ConditionalOnBean(value={xxx.class})
@ConditionalOnClass
@ConditionalOnMissingClass
@ConditionalOnProperty 系统中指定的属性是否有指定的值
@ConditionalOnWebApplication
@ConditionalOnNotWebApplication