代码实例
Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
yaml定义自定义属性
language-trainer:
login:
oauth-enabled: false
定义关联属性类
@ConfigurationProperties(prefix = "language-trainer.login")
@Data
public class LoginProperties {
private boolean oauthEnabled;
}
Spring Boot启动类配置开启自定义属性
@SpringBootApplication
@ConfigurationPropertiesScan("com.oliverclio.languagetrainer.config.properties")
public class LanguageTrainerApplication {
public static void main(String[] args) {
SpringApplication.run(LanguageTrainerApplication.class, args);
}
}
注入bean
加上@Component
注解,在需要使用的地方以@Autowired
的方式注入即可
@ConfigurationProperties(prefix = "language-trainer.login")
@Component
@Data
public class LoginProperties {
private boolean oauthEnabled;
}
@Autowired
private LoginProperties loginProperties;
注入静态变量
使用ApplicationRunner
,在容器初始化完成后执行初始化工作,把自定义配置映射的bean注入到静态变量中,之后就可以通过静态变量的方式使用
@Component
@AllArgsConstructor
public class StaticPropertiesInit implements ApplicationRunner {
private final LoginProperties loginProperties;
@Override
public void run(ApplicationArguments args) {
StaticProperties.loginProperties = loginProperties;
}
}
注入静态变量的配置假如要用于静态初始化,需要相当小心,必须注意静态初始化的时机,静态初始化必须在容器初始化完成后
消除IDEA找不到自定义属性的警告
通过Maven重新编译即可
mvn clean compile
查看项目编译内容,会生成一个JSON文件target/classes/META-INF/spring-configuration-metadata.json
,IDEA根据该文件关联配置属性与映射的对象属性
参考文档
PREVIOUSJava四种引用类型