Spring 变量的引导约定
Spring Boot Convention for Variables
所以我的 spring 启动应用程序有一个 application.yml
文件,如下所示:
spring:
url: localhost
email:
from: something@gmail.com
app:
uuid: 3848348j34jk2dne9
我想像这样将这些配置属性连接到我的应用程序中的不同组件中:
@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
}
}
以上在我的应用程序中按预期工作。但我的问题是这是否是 spring 引导中的最佳实践。据我所知,唯一的其他替代方法是通过在配置 class 中创建一个 bean 来使用 Properties
对象,使用所有配置变量加载属性并自动装配 属性 bean 到组件中。
这种情况下的最佳做法是什么?
正如您所确定的,注入配置的两个主要选择是对单个属性使用 @Value
或对 javabean 配置对象使用 @ConfigurationProperties
。
您使用哪个取决于偏好。我个人更喜欢使用配置对象。
使用 @ConfigurationProperties
允许您使用 JSR-303 bean 验证。
如果需要,您还可以在 javabean 的 setter 中编写自己的自定义验证。
您可以从非 spring 项目注释配置 bean,这允许您编写易于配置但不依赖于 spring.
的库
您可以从对象中生成 IDE 元数据,使您的开发过程更加顺畅。
以下是我在使用 spring 配置时推荐的一些做法。
为应用程序的逻辑组件创建单独的 @ConfigurationProperties
对象。尽量保持模块化,避免为整个应用程序配置创建垃圾场。
不要在多个位置使用相同的 @Value
属性。
如果您的应用程序中的多个位置需要相同的配置,那么您可能应该将该值移动到配置对象中。
在多个 @Value
注释中使用相同的 属性 会使推理变得更加困难,并且如果您在一个地方通过 "SpEL" 表达式定义默认值并且也可能导致意外行为不是另一个。
不要在 spring
名称中定义自己的属性space。
例如你的 spring.url
属性 is not one of the properties defined in the documentation.
通过使用相同的名称 space,您 运行 有可能在未来的 spring-boot 版本中使用该名称。
所以我的 spring 启动应用程序有一个 application.yml
文件,如下所示:
spring:
url: localhost
email:
from: something@gmail.com
app:
uuid: 3848348j34jk2dne9
我想像这样将这些配置属性连接到我的应用程序中的不同组件中:
@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
}
}
以上在我的应用程序中按预期工作。但我的问题是这是否是 spring 引导中的最佳实践。据我所知,唯一的其他替代方法是通过在配置 class 中创建一个 bean 来使用 Properties
对象,使用所有配置变量加载属性并自动装配 属性 bean 到组件中。
这种情况下的最佳做法是什么?
正如您所确定的,注入配置的两个主要选择是对单个属性使用 @Value
或对 javabean 配置对象使用 @ConfigurationProperties
。
您使用哪个取决于偏好。我个人更喜欢使用配置对象。
使用 @ConfigurationProperties
允许您使用 JSR-303 bean 验证。
如果需要,您还可以在 javabean 的 setter 中编写自己的自定义验证。
您可以从非 spring 项目注释配置 bean,这允许您编写易于配置但不依赖于 spring.
的库
您可以从对象中生成 IDE 元数据,使您的开发过程更加顺畅。
以下是我在使用 spring 配置时推荐的一些做法。
为应用程序的逻辑组件创建单独的
@ConfigurationProperties
对象。尽量保持模块化,避免为整个应用程序配置创建垃圾场。不要在多个位置使用相同的
@Value
属性。
如果您的应用程序中的多个位置需要相同的配置,那么您可能应该将该值移动到配置对象中。
在多个@Value
注释中使用相同的 属性 会使推理变得更加困难,并且如果您在一个地方通过 "SpEL" 表达式定义默认值并且也可能导致意外行为不是另一个。不要在
spring
名称中定义自己的属性space。
例如你的spring.url
属性 is not one of the properties defined in the documentation.
通过使用相同的名称 space,您 运行 有可能在未来的 spring-boot 版本中使用该名称。