使用`@Value("${property}")`注解来注入配置属性有时会很麻烦,特别是如果您正在使用多个属性或者您的数据本质上是分层的。 Spring Boot提供了一种使用属性的替代方法,该方法允许强类型bean管理和验证应用程序的配置,如以下示例所示:
~~~java
package com.example;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("acme")
public class AcmeProperties {
private boolean enabled;
private InetAddress remoteAddress;
private final Security security = new Security();
public boolean isEnabled() { ... }
public void setEnabled(boolean enabled) { ... }
public InetAddress getRemoteAddress() { ... }
public void setRemoteAddress(InetAddress remoteAddress) { ... }
public Security getSecurity() { ... }
public static class Security {
private String username;
private String password;
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
public String getUsername() { ... }
public void setUsername(String username) { ... }
public String getPassword() { ... }
public void setPassword(String password) { ... }
public List<String> getRoles() { ... }
public void setRoles(List<String> roles) { ... }
}
}
~~~
上的对象定义了下面的属性
* acme.enabled,默认值false
* acme.remote-address,从String转换而来
* acme.security.username,使用内部类`security`
* acme.security.password
* acme.security.roles,使用了`String`的集合
你还要把配置类注册到`@EnableConfigurationProperties`,如下所示:
~~~
@Configuration
@EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration {
}
~~~
> `@ConfigurationProperties`bean注册之后,bean的常规name是`<prefix>-<fqn>`,其中`<prefix>`是 `@ConfigurationProperties`注解时指定的前缀值,
> `<fqn>`是全限定类名称,上面的示例bean名称为`acme-com.example.AcmeProperties`,如果不设置前缀,那么就是`com.example.AcmeProperties`
>
即使前面的配置为`AcmeProperties`创建了一个常规bean,我们也建议`@ConfigurationProperties`只处理环境,特别是不从上下文中注入其他bean。 话虽如此,`@ EnableConfigurationProperties`注解也会自动应用于您的项目,以便从`Environment`配置任何使用`@ConfigurationProperties`注解的bean。 您可以通过`MyConfiguration `确保`AcmeProperties`已经是一个bean,如以下示例所示:
~~~
@Component
@ConfigurationProperties(prefix="acme")
public class AcmeProperties {
// ... see the preceding example
}
~~~
使用`@ConfigurationProperties`,像使用其他bean那样注入接口,如下所示:
~~~
@Service
public class MyService {
private final AcmeProperties properties;
@Autowired
public MyService(AcmeProperties properties) {
this.properties = properties;
}
//...
@PostConstruct
public void openConnection() {
Server server = new Server(this.properties.getRemoteAddress());
// ...
}
}
~~~
- I. Spring Boot Documentation
- 1.关于文档
- 2. 获取帮助
- 3.第一步
- 4.使用spring boot
- 5.学习spring boot的特点
- 6.转移到生产
- 7.高级话题
- II. Getting Started
- 8.引入spring boot
- 9.系统需要
- 9.1 Servlet容器
- 10.安装spring boot
- 10.1 java开发者安装说明
- 10.1.1 Maven Installation
- 10.2 Installing the Spring Boot CLI TODO
- 10.3 从早期的版本升级
- 11.开发你的第一个spring boot应用
- 11.1 创建POM
- 11.2 添加Classpath依赖
- 11.3 写代码
- 11.3.1 @RestController 和@RequestMapping 注解
- 11.3.2 @EnableAutoConfiguration注解
- 11.3.3 main方法
- 11.4运行 Example
- 11.5 创建可执行的Jar
- 12.下一步要阅读的
- III. Using Spring Boot
- 13.构建系统
- 13.1 依赖管理
- 13.2 Maven
- 13.2.1 继承Starter Parent
- 13.2.2 不使用Spring Boot的Parent POM
- 13.2.3 使用Spring Boot Maven 插件
- 13.3. Gradle TODO
- 13.4. Ant TODO
- 13.5. Starters TODO
- 14.结构化代码
- 14.1使用“default”包
- 14.2 主应用程序类的位置
- 15.配置类
- 15.1 引入新增的配置类
- 15.2 引入xml配置
- 16.自动化配置
- 16.1 逐渐替换自动配置
- 16.2 禁用特定的配置类
- 17.spring的bean和依赖配置
- 18.使用@SpringBootApplication注解
- 19.运行的你的程序
- 19.1 在IDE中运行
- 19.2 运行打包的jar
- 19.3 使用maven插件运行
- 19.4 使用Gradle 插件 TODO
- 19.5 热交换
- 20.开发者工具
- 20.1 默认属性
- 20.2 自动重启
- 20.2.1 记录环境评估的更改
- 20.2.2 排除Resources
- 20.2.3 监视其他路径
- 20.2.4 禁止重启
- 20.2.5 使用触发文件
- 20.2.6 自定义重启类加载器
- 20.2.7 了解限制
- 20.3 实时加载
- 20.4 全局设置
- 20.5 远程应用
- 20.5.1 运行远程客户端
- 20.5.2 远程更新
- 21.把你的应用打包到生产
- 22.下一步要阅读的
- IV. Spring Boot features
- 23.spring应用
- 23.1 启动失败
- 23.10 管理功能
- 23.8 使用ApplicationRunner 或 CommandLineRunner
- 24.可扩展的配置
- 24.1 配置随机值
- 24.2 访问命令行属性
- 24.3 配置文件
- 24.4 特定配置文件
- 24.5 属性的占位符
- 24.6 使用yaml替代properties
- 24.7 类型安全的配置属性
- 24.7.1 第三方配置
- 24.7.2 灵活的绑定
- 25.外部的配置profiles
- 25.1 追加可用的外部配置
- 25.2 编程式的设置外部配置
- 25.3 外部配置文件
- 26.日志
- 26.1 日志格式
- 26.2 控制台输出
- 26.2.1颜色代码数据
- 26.3 文件输出
- 26.4 日志级别
- 26.5 自定义日志配置
- 26.6 Logback扩展
- 26.6.1特定于配置文件的配置
- 26.6.2 环境属性
- 26.6.3 logback.xml配置说明
- 27.开发web应用
- 27.1 spring mvc
- 27.1.1 Spring MVC自动配置
- 27.1.2 HttpMessageConverters
- 27.1.3 定制JSON序列号和反序列化
- 27.1.4 MessageCodesResolver
- 27.1.5 静态内容
- 27.1.6 欢迎页面
- 27.1.7 定制Favicon
- 27.1.8 路径匹配和内容判断
- 27.1.9 ConfigurableWebBindingInitializer
- 27.1.10 模板引擎
- 27.1.11 处理错误
- 27.1.12 Spring HATEOAS
- 27.1.13 跨域支持
- 27.2 spring webflux
- 28.安全
- 28.1 mvc安全
- httpSecurity,webSecurity,authenticationManager
- 29.使用SQL数据库
- 29.1 配置数据源
- 29.1.1 嵌入式数据库支持
- 29.1.2 可用于生产的数据库
- 29.1.3 从JNDI DataSource获取连接
- 30.使用NoSql技术
- 30.1 Redis
- 30.1.1 连接Redis
- 31.缓存
- 32.消息
- 32.1 jms
- 32.2 amqp
- 32.2.1 支持RabbitMQ
- 32.2.2 发送消息
- 32.2.3 接收消息
- 33.使用RestTemplate调用REST服务
- 34.使用WebClient调用REST 服务
- 35.验证
- 36.发邮件
- 37.使用JTA的分布式事务
- 37.01 结合spring框架的本地事务
- 38. Hazelcast
- 39.定时任务
- 40.spring集成
- 41.spring会话
- 42.JMX的监控和管理
- 43.测试
- 43.1测试范围的依赖
- 43.2 测试Spring应用
- 43.2 测试spring boot应用
- 44. WebSockets
- 45. Web Services
- 46.创建你自己的自动化配置
- 47. Kotlin的支持
- 48.下一步要阅读的
- V. Spring Boot Actuator: Production-ready features
- 49.开启生产用的特性
- 50.端点
- 50.1 启动端点
- 50.2 暴露端点
- 50.3 安全的http端点
- 51.HTTP的监控和管理
- 52.JMX的监控和管理
- 53.日志
- 54.度量
- 55.审计
- 56.HTTP追踪
- 57.过程监控
- 58.上云的支持
- 59.下一步要阅读的
- VI. Deploying Spring Boot Applications
- 60.云端的部署
- 61.安装spring boot应用
- 62.下一步要阅读的
- VII. Spring Boot CLI
- 63.安装CTL
- 64.使用CTL
- 65.使用Groovy Beans DSL开发应用
- 66.使用settings.xml配置CTL
- 67.下一步要阅读的
- VIII. Build tool plugins
- 68. Spring Boot Maven插件
- 69. Spring Boot Gradle插件
- 70. Spring Boot AntLib模块
- 71.其他构建系统的支持
- 72.下一步要阅读的
- IX. ‘How-to’ guides
- 73.spring boot应用
- 74.属性和配置
- 75.嵌入式的web服务器
- 76. Spring MVC
- 76.1 写JSON风格的服务
- 76.2 写XML风格的服务
- 76.3 定制Jackson ObjectMapper
- 76.4 定制@ResponseBody呈现
- 76.5 处理文件上传
- 77. Jersey
- 78. HTTP Clients
- 79. 日志
- 80. 数据访问
- 80.1 配置自己的数据源
- 81. 数据库初始化
- 82. 消息
- 83. 批处理应用
- 84. Actuator
- 85. 安全
- 86. 热交换
- 87.构建
- 88.传统开发
- X. Appendices
- A.通用的配置
- B. 配置元信息
- C.自动配置类
- D. 测试自动配置注解
- E. 可执行的jar格式
- F. 依赖的版本