@ConfigurationProperties 是 Spring Boot 中的一个注解,它可以绑定一个配置文件中的属性值到一个 Java 对象中。通过使用该注解,可以将应用程序配置属性组织在一个 POJO(Plain Old Java Object)类中,以更方便地访问和管理它们。在 Spring Boot 中,我们可以在应用程序的配置类中使用该注解,指定一个前缀,然后将配置文件中以该前缀开头的属性值绑定到该类的属性中。这样,在其他组件中就可以直接使用该类来访问这些属性了。
具体实现步骤如下:
- 创建一个用于存储配置属性的 Java 类,并添加
@ConfigurationProperties
注解。这个类通常被称为配置属性类或配置类。
@ConfigurationProperties(prefix = "app")
public class AppConfig {
private String name;
private int age;
// 省略 getter 和 setter 方法
}
- 在配置类中,使用
@EnableConfigurationProperties
注解将配置属性类注册为 Spring Bean。
@Configuration
@EnableConfigurationProperties(AppConfig.class)
public class AppConfigConfiguration {
// 配置类的其他配置
}
- 在应用程序的配置文件(如 application.properties 或 application.yml)中,定义与配置属性类对应的属性,并加上相应的前缀。
示例 application.properties:
app.name=WeTab AI
app.age=3
示例 application.yml:
app:
name: WeTab AI
age: 3
- 在需要使用配置属性的组件中,使用
@Autowired
注解注入配置属性类,并直接访问其中的属性。
@Component
public class MyComponent {
@Autowired
private AppConfig appConfig;
public void doSomething() {
String name = appConfig.getName();
int age = appConfig.getAge();
// 使用配置属性进行操作
}
}
通过以上步骤,配置
除了以上基本实现方式之外,还有一些额外特性和参数可以使用。
@ConfigurationProperties
注解可以通过value
属性来指定配置文件中的属性前缀,也可以通过prefix
属性来指定前缀。如果同时指定了这两个属性,value
将被忽略。例如:
@ConfigurationProperties(prefix = "myapp")
public class AppConfig {
// ...
}
myapp.name=WeTab AI
myapp.age=3
- 配置属性类中的属性名可以与配置文件中的属性名不完全匹配。如果无法匹配,可以使用
@Value
注解来映射。
@ConfigurationProperties(prefix = "myapp")
public class AppConfig {
@Value("${myapp.fullname}")
private String name;
private int age;
// ...
}
myapp.fullname=WeTab AI
myapp.age=3
- 对于多个配置文件,可以使用
@PropertySource
注解和@ConfigurationPropertiesScan
注解来指定它们,例如:
@Configuration
@ConfigurationPropertiesScan
@PropertySource("classpath:app1.properties")
@PropertySource("classpath:app2.properties")
public class AppConfigConfiguration {
// ...
}
- 如果希望将配置属性类注册为 Spring Bean,可以使用
@Component
、@Service
、@Repository
、@Controller
等注解,或者在配置类中使用@Bean