[英]How do I use a variable from an application.yml file in my normal code?
例如,假设在我的 yml 文件中有一个名为 indicator 的变量。 并且基于指标变量的值是什么,我希望代码做一些不同的事情。 我将如何访问常规代码中的 yml 变量并相应地使用它?
你可以使用这个:
@Value("${your.path.yml.string}")
private String x;
YML:
your:
path:
yml:
string: hello
x 将是“你好”
@Value("${spring.application.name}")
private String appName;
@Value("${spring.application.name: defaultValue}")
private String appName;
@Autowired
private Environment environment;
String appName = environment.get("spring.application.name");
您可以将@Value
注释添加到 bean 中的任何字段。
@Value("$(path.to.your.variable)")
String myString;
也适用于构造函数。
public MyClass(@Value("$(path.to.your.variable)") String myString) {
您可以在字段或参数上使用@Value
将属性分配给某个变量。
属性示例:
@Value("${indicator}")
private String indicator
参数示例:
private void someMethod(@Value("${indicator}") String indicator) {
...
}
然后,您可以根据需要使用指标。
注意:您使用@Value
的 class 应该是 Spring 组件
使用 Spring-Boot,您可以自动为您提供文件application.yml
。 您可以做的是在此文件中添加一个属性,例如:
my.properties: someValue
然后,在您的 Spring Bean 之一(使用@Component
或@Bean
定义)中,您可以使用注释@Value
检索此值。 然后,对这个变量做任何你想做的事情。
例如:
@Component
public class MyClass {
@Value("${my.properties"}
private String myProp; // will get "someValue" injected.
...
// Just use it in a method
public boolean myMethod() {
if(myProp.equals("someValue") {
// do something
} else {
// do something else
}
}
}
最好的方法是不要在 Spring 和您的“正常”代码之间建立紧密耦合,而是使用正常的 Java 功能,如构造函数以及@Bean
方法:
class MyService {
final String indicatorName;
MyService(String indicatorName) {
this.indicatorName = indicatorName;
}
}
...在您的配置中 class...
@Bean
MyService myService(@Value("indicator.name") String indicatorName) {
return new MyService(indicatorName);
}
Spring Boot 的两个注意事项:
@ConfigurationProperties
功能允许您将 map 属性添加到结构化的 Java 数据类上,并且通常比手动使用@Value
更干净。company.project.indicator.name
代替indicator.name
。 我建议查看 Boot 中的DataSourceProperties
以查看如何设置所有这些的示例。但是,更广泛地说,当您说您希望代码“做一些不同的事情”时,听起来更好的选择可能是让不同的类在不同的情况下被激活。 Spring 配置文件和 Spring 引导自动配置都有助于执行此操作。
问题陈述可以重新定义为Java中的配置管理。
你应该有一个像 ConfigManager 这样的组件,它在你的应用程序启动时被实例化。 该组件将读取一个属性文件,即您的用例中的 yaml。 后续应用逻辑将从公开为简单键/值对的 ConfigManager 中获取这些值。
剩下的就是让您确定如何从 yaml 文件中读取和解析值。 这已经在这里得到了回答: Parse a YAML file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.