PropertyPlaceholderConfigurer 与过滤器 -- Spring Beans

问题描述 投票:0回答:3

我有一个关于 PropertyPlaceholderConfigurer (org.springframework.beans.factory.config.PropertyPlaceholderConfigurer) 和我的 pom.xml 中定义的普通过滤器之间的区别的问题。

我一直在查看示例,似乎即使在 pom.xml 中默认定义并标记为活动过滤器,它们仍然在 Spring 的 applicationContext.xml 中使用 PropertyPlaceholderConfigurer。

这意味着 pom.xml 引用了 filter-LOCAL.properties,而 applicationContext.xml 引用了 application.properties,并且它们都包含相同的设置。

这是为什么呢?这是应该做的吗?我可以在不存在 application.properties 的情况下运行目标 mvn jetty:run ,但是如果我向 application.properties 添加与 filter-LOCAL.properties 不同的设置,它们似乎不会被覆盖。

这是我的意思的一个例子:

pom.xml

 
        
            本地
            
                真实
            
            
                本地
            
        
    

applicationContext.xml

 
        
            
                类路径:application.properties
            
        
        
    

    
        
        
        
        
    

application.properties和filters-LOCAL.properties的内容示例

jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/shoutbox_dev
jdbc.用户名=测试者
jdbc.password=测试者

我可以从 applicationContext 中删除 propertyConfigurer,创建一个 PROD 过滤器并忽略 application.properties 文件,还是在部署到生产服务器时会给我带来问题?

java hibernate spring maven-2
3个回答
2
投票

您应该使用 Maven 选择要使用的 Spring 属性文件,具体取决于您要构建的环境。

当您在 IDE 中进行测试时,您应该只从测试中启动 Spring 容器,除了管理依赖项之外,不要使用 Maven 进行任何其他操作。


2
投票

作为记录,以下是OP所关注的博客系列的作者在此评论中所写的内容:

我曾经是Spring的忠实粉丝

PropertyPlaceholderConfigurer
但是曾经 自从我开始使用 Maven 以来我就不再使用 发现它和 Maven 的过滤器一样有用, 使用过滤器文件作为 在这里解释,或者通过有多个 pom 中不同的配置文件 每个配置文件的部署层 指定属性。

我最大的抱怨是

PropertyPlaceholderConfigurer
就是那个 你只能拥有一个
PropertyPlaceholderConfigurer
豆。 而且没有很好的记录。

使用maven的过滤器文件你可以拥有 你喜欢多少就多少。

我更喜欢 Maven 的另一个原因 过滤器是用它们你可以做 ‘mvn package’ 然后查看 目标目录并关注 过滤配置文件,看看它是什么 做过。与春天的

PropertyPlaceholderConfigurer
你 不知道被替换了什么 直到应用程序启动。

我赞同这个观点,并且更喜欢过滤方法,而不是使用

PropertyPlaceholderConfigurer
和 Antrun 插件,在运行测试时将
test.properties
复制到
application.properties
中。所有主要 IDE(Eclipse、IntelliJ、NetBeans)都很好地支持使用过滤资源,所以我不明白为什么我不应该使用它。


0
投票

如果您使用此代码

上下文:属性占位符

在此代码之前

你会得到它的。

原因:java.lang.IllegalArgumentException:无法解析 值“${jdbc.driver}”中的占位符“jdbc.driver”

该声明包括您使用的内容

<import ></import>

!!!删除它

上下文:属性占位符

© www.soinside.com 2019 - 2024. All rights reserved.