Ric*_*ard 10 java spring spring-mvc javabeans spring-boot
所以我有一个application.yml弹簧启动应用程序的文件,如下所示:
spring:
url: localhost
email:
from: something@gmail.com
app:
uuid: 3848348j34jk2dne9
Run Code Online (Sandbox Code Playgroud)
我想将这些配置属性连接到我的应用程序中的不同组件,如下所示:
@Component
public class FooA {
private final String url;
public FooA(@Value("${spring.url}") String url) {
this.url = url
}
}
@Component
public class FooB {
private final String from;
public FooA(@Value("${email.from}") String from) {
this.from = from
}
}
@Component
public class FooC {
private final String uuid;
public FooA(@Value("${app.uuid}") String uuid) {
this.uuid = uuid
}
}
Run Code Online (Sandbox Code Playgroud)
以上工作正如我的申请中所述.但我的问题是,这是否是春季靴子的最佳实践.我所知道的另一个替代方法是Properties通过在配置类中创建bean 来使用对象,使用所有配置变量加载属性并将属性bean自动装配到组件中.
在这种情况下,最佳做法是什么?
Mag*_*nus 17
正如您已经确定注入配置的两个主要选择是使用@Value单个属性或@ConfigurationPropertiesjavabean配置对象.
您使用哪一个归结为偏好.我个人更喜欢使用配置对象.
使用@ConfigurationProperties允许您使用JSR-303 bean验证.
如果需要,您还可以在javabean的setter中编写自己的自定义验证.
您可以从非spring项目中注释配置bean,这允许您编写易于配置但不依赖于spring的库.
您可以从对象生成IDE元数据,这可以使您的开发过程更加顺畅.
以下是使用弹簧配置时我建议的一些做法.
@ConfigurationProperties为应用程序的逻辑组件创建单个对象.尽量保持模块化,避免为整个应用程序配置创建转储基础.
不要@Value在多个位置使用相同的属性.
如果应用程序中的多个位置需要相同的配置,那么您应该将值移动到配置对象中.
使用多个相同属性的@Value注释就更难理性各地,而且还可能会导致意外的行为,如果你在一个地方"规划环境地政司"的表达方式,而不是其他定义的默认值.
不要在spring命名空间中定义自己的属性.
例如,您的spring.url属性不是文档中定义的属性之一.
通过使用相同的名称空间,您将面临在将来的spring-boot版本中使用该名称的风险.
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |