作用
在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。
在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties
注解,我们可以方便的获取这些参数值
配置
- application.properties
auto-log.enable=true
auto-log.level=info
我们当然可以通过 @Value
或者 Environment 等获取对应的配置,但是这样不够优雅。
spring 为我们提供了更加方便好用的使用方式。
代码
- AutoLogProperties.java
@ConfigurationProperties(prefix = "auto-log", ignoreUnknownFields = true)
public class AutoLogProperties {
private String enable;
private String level;
public String getEnable() {
return enable;
}
public void setEnable(String enable) {
this.enable = enable;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
@Override
public String toString() {
return "AutoLogProperties{" +
"enable='" + enable + '\'' +
", level='" + level + '\'' +
'}';
}
}
这里 spring 会根据 prefix 移除后的属性,和 pojo 的属性进行映射处理。
配置类启用
AutoLogProperties 类可以通过 @Component
注解交给 spring 管理,也可以使用下面的方式:
@EnableConfigurationProperties(AutoLogProperties.class)
声明对于配置的使用。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(AutoLogProperties.class)
public class AutoLogConfig {
@Autowired
private AutoLogProperties properties;
public String showInfo() {
System.out.println(properties);
return properties.toString();
}
}
测试
import com.github.houbb.springboot.learn.properties.config.AutoLogConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IndexController {
private final Logger logger = LoggerFactory.getLogger(IndexController.class);
@Autowired
private AutoLogConfig autoLogConfig;
@GetMapping("/index")
public String index() {
return autoLogConfig.showInfo();
}
}
在控台访问,就可以看到对应的配置信息:
AutoLogProperties{enable='true', level='info'}