Spring环境属性源配置

标签 spring

我正在开发一个应用程序库,其中包含一个名为“Config”的实用程序类,它由 Spring Environment 对象支持,并为所有应用程序提供强类型的 getter配置值。

配置的属性源可能因环境(DEV/PROD)和使用情况(独立/测试/webapp)而异,范围可以从默认属性(系统和环境属性)到自定义数据库和 JNDI 源。

我正在苦苦挣扎的是如何让使用这个库的应用程序轻松配置 Environment 使用的属性源,以便这些属性可以在我们的 中使用Config 类并通过 PropertySourcesPlaceholderConfigurer

我们仍在使用 XML 配置,因此理想情况下,这可以在 XML 中进行配置。

<bean id="propertySources" class="...">
    <property name="sources">
        <list>
            <ref local="jndiPropertySource"/>
            <ref local="databasePropertySource"/>
        </list>
    </property>
</bean>

...然后以某种方式注入(inject)到 Environment 的属性源集合中。

我了解到,由于应用上下文生命周期的时间安排,这样的事情可能是不可能的,这可能需要使用应用程序初始化程序类来完成。

有什么想法吗?

最佳答案

这取决于您希望如何使用属性,如果是使用 ${propertyname} 语法注入(inject)属性,那么是的,只需使用 PropertySourcesPlaceHolderConfigurer 即可,它在内部可以访问 PropertySources在环境中注册。

如果您打算直接使用 Environment,例如使用 env.getProperty(),那么您是对的 - 使用 PropertySourcesPlaceHolderConfigurer 的属性在此处不可见。唯一的方法是使用 Java 代码注入(inject)它,我知道有两种方法:

一个。使用 Java 配置:

@Configuration
@PropertySource("classpath:/app.properties")
public class SpringConfig{

}

b.使用自定义 ApplicationContextInitializer ,它的描述方式here

关于Spring环境属性源配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416005/

相关文章:

java - 将 ehcache 添加到 DAO 类后,Junit 测试失败,无法在测试类中实例化 DAO

spring - Spring MVC 支持 JSR 311 注释吗?

java - 不要针对特定​​的 URL 和 HTTP 方法调用 Spring Security 预身份验证过滤器

java - 为休息服务构建 Spring 安全拦截器

java - 与 Java 11 兼容的最低 Spring 版本

spring - Keycloak:从内部 docker 容器运行时 token 颁发者无效

java - Gradle-以jar形式共享项目依赖

java - 将redis与spring boot集成

java |将字符串保留为枚举

java - 这个错误 'org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not deserialize instance' 是什么意思?