我试图完成@Laplie Anderson在Spring Environment backed by Typesafe Config提出的建议,但是在spring-boot应用程序中。
我想为不同的弹簧活动配置文件加载不同的配置文件。这是一个例子。
@Configuration()
@Import(value = {CommonConfiguration.class})
@PropertySource(factory=TypesafePropertySourceFactory.class, value="config/dev/app.conf")
@Profile("dev")
public class DevConfig {}
@Configuration()
@Import(value = {CommonConfiguration.class})
@PropertySource(factory=TypesafePropertySourceFactory.class, value="config/prod/app.conf")
@Profile("prod")
public class ProdConfig {}
但这会导致应用启动时出现以下错误。
java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration.buildProperties
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:64) ~[spring-boot-autoconfigure-1.5.6.RELEASE.jar!/:1.5.6.RELEASE]
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102) ~[spring-context-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
...
Caused by: com.typesafe.config.ConfigException$BadPath: path parameter: Invalid path 'spring.info.build.location:classpath:META-INF/build-info.properties': Token not allowed in path expression: ':' (you can double-quote this token if you really want it here)
at com.typesafe.config.impl.PathParser.parsePathExpression(PathParser.java:155) ~[config-1.3.1.jar!/:na]
at com.typesafe.config.impl.PathParser.parsePathExpression(PathParser.java:74) ~[config-1.3.1.jar!/:na]
...
我缺少什么?
有没有更好的方法来实现这一目标?
以下版本在这里发挥作用。
spring-boot:1.5.6.RELEASE
typesafe配置:1.3.1
答案 0 :(得分:0)
也许您也可以使用ContextInitializer来解决它,正如我在此处的答案中所建议的:https://stackoverflow.com/a/58789778/142671
答案 1 :(得分:0)
对我来说,它可以通过忽略类型安全配置不受支持的字符来工作。
public class TypesafeConfigPropertySource extends PropertySource<Config> {
public TypesafeConfigPropertySource(String name, Config source) {
super(name, source);
}
@Override
public Object getProperty(String name) {
if (name.contains("["))
return null;
if (name.contains(":"))
return null;
if (source.hasPath(name)) {
return source.getAnyRef(name);
}
return null;
}
}
注释:
Environment.getProperty(property)
和@Value一起使用时,它就像是一种魅力; type-safe configuration properties
也能正常工作。还没尝试。答案 2 :(得分:-1)
刚才注意到spring-boot支持几乎所有我需要的功能的.yml文件,特别是'属性中的占位符'。我会尝试使用它 - https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-yaml
我仍然想知道原问题的答案。是因为':'在typesafe-config值中是不可接受的吗?没有解决方法吗?