这些问题你都知道吗?
- @Value的用法
- @Value数据来源
- @Value动态刷新的问题
@Value的用法
源码
@Target({
ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {
String value();
}
修饰范围:字段,方法,方法参数,注解。
案例1 解析默认配置文件内容
@Component
public class DbConfig {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
//省略
}
如果application.yml和properties同时存在会解析properties。
案例2 指定配置文件解析
valued1.properties
jdbc.url=v1Url
jdbc.username=v1Name
jdbc.password=v1password
@Component
@PropertySource("classpath:valued1.properties")
public class DbConfig {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
//省略
}
PropertySource
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {
String name() default "";
String[] value();
boolean ignoreResourceNotFound() default false;
String encoding() default "";
Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class;
}
修饰在类型上,有@Repeatable重复使用注解。
既然允许重复,我们修改新增一个配置文件 valued2.properties
jdbc.url=v2
jdbc.username=v2name
jdbc.password=v3name
在DbConfig上面,并且修改顺序查看输出验证以哪一个配置文件为准。