spring-独立启动yaml配置
spring-boot yaml configuration standalone
是否可以在 spring-boot 应用程序之外利用 Spring-Boot 的 YAML 配置?即我们可以仅使用添加 spring-boot 依赖项的 YAML 配置功能吗?
我的用例是一个需要配置的小型实用程序项目,YAML 方法很合适。如果我将其连接到主项目(这是一个 Spring-Boot 应用程序),一切都很好。但是如果我想单独测试这个实用程序项目(简单 java-app),它不会连接配置。有什么想法吗?可能是我在这里遗漏了一些基本的东西。
下面的示例代码片段。以下包是组件扫描的一部分。
@Component
@ConfigurationProperties(prefix="my.profile")
public class TestConfig {
private List<String> items;
public List<String> getItems() {
return items;
}
public void setItems(List<String> items) {
this.items = items;
}
}
YAML 配置
my:
profile:
items:
- item1
- item2
关键是YamlPropertiesFactoryBean, as M. Deinum提到的。
import org.springframework.beans.factory.config.YamlProcessor;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;
import org.springframework.core.io.ClassPathResource;
import java.util.Properties;
public class PropertyLoader {
private static Properties properties;
private PropertyLoader() {}
public static Properties load(String... activeProfiles) {
if (properties == null) {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(new ClassPathResource("application.yml"));
factory.setDocumentMatchers((profile) -> YamlProcessor.MatchStatus.FOUND); // TODO filter on active profiles
factory.afterPropertiesSet();
properties = factory.getObject();
}
return properties;
}
public static <T> T value(String property, Class<T> target) {
load();
ConfigurationPropertySource propertySource = new MapConfigurationPropertySource(properties);
Binder binder = new Binder(propertySource);
return binder.bind(property.toLowerCase(), target).get();
}
}
PropertyLoader#value
可以这样使用:
List<String> items = PropertyLoader.value("my.profile.items", List.class);
是否可以在 spring-boot 应用程序之外利用 Spring-Boot 的 YAML 配置?即我们可以仅使用添加 spring-boot 依赖项的 YAML 配置功能吗?
我的用例是一个需要配置的小型实用程序项目,YAML 方法很合适。如果我将其连接到主项目(这是一个 Spring-Boot 应用程序),一切都很好。但是如果我想单独测试这个实用程序项目(简单 java-app),它不会连接配置。有什么想法吗?可能是我在这里遗漏了一些基本的东西。
下面的示例代码片段。以下包是组件扫描的一部分。
@Component
@ConfigurationProperties(prefix="my.profile")
public class TestConfig {
private List<String> items;
public List<String> getItems() {
return items;
}
public void setItems(List<String> items) {
this.items = items;
}
}
YAML 配置
my:
profile:
items:
- item1
- item2
关键是YamlPropertiesFactoryBean, as M. Deinum提到的。
import org.springframework.beans.factory.config.YamlProcessor;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;
import org.springframework.core.io.ClassPathResource;
import java.util.Properties;
public class PropertyLoader {
private static Properties properties;
private PropertyLoader() {}
public static Properties load(String... activeProfiles) {
if (properties == null) {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(new ClassPathResource("application.yml"));
factory.setDocumentMatchers((profile) -> YamlProcessor.MatchStatus.FOUND); // TODO filter on active profiles
factory.afterPropertiesSet();
properties = factory.getObject();
}
return properties;
}
public static <T> T value(String property, Class<T> target) {
load();
ConfigurationPropertySource propertySource = new MapConfigurationPropertySource(properties);
Binder binder = new Binder(propertySource);
return binder.bind(property.toLowerCase(), target).get();
}
}
PropertyLoader#value
可以这样使用:
List<String> items = PropertyLoader.value("my.profile.items", List.class);