【问题标题】:PropertyPlaceholderConfigurer vs Filters -- Spring BeansPropertyPlaceholderConfigurer 与过滤器——Spring Beans
【发布时间】:2010-05-03 11:36:50
【问题描述】:

我有一个关于 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.username=测试者 jdbc.password=测试者

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

【问题讨论】:

    标签: java hibernate spring maven-2


    【解决方案1】:

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

    当您在 IDE 中进行测试时,您应该只从测试中启动 Spring 容器,而不要将 Maven 用于管理依赖项之外的任何其他事情。

    【讨论】:

    • 你有什么建议吗?我应该用谷歌搜索一下如何使用 Maven 按照你的建议选择弹簧属性?
    • @John:我个人更喜欢Ivy和Ant,但是原则上应该是一样的。根据我正在构建的环境,我复制不同的属性文件并将其重命名为例如 application.properties。然后我导入 PropertyPlaceholderConfigurer 的 Spring 应用程序上下文只知道 application.properties。如果这是从 test.properties 复制的,或者 production.properties 对于 Spring 容器是未知的。只有我的测试上下文知道我的 JUnit 测试的测试属性。
    • -1 - 为每个环境构建单独的可部署实例是一个坏主意。它不能很好地扩展,您最终将不得不公开战争以查看包含哪些属性。在此处查看我的答案以获取另一种方法:stackoverflow.com/questions/1311360/…
    • @Pablojim:我为什么要打开一个war文件来查看我的属性?不,我更喜欢将系统属性放在单独的文件夹中。然后配置 Web 容器以将该文件夹添加到类路径中。然后我最终只得到一个特定于环境的属性文件,而不是很多,并且可能会出现使用错误文件的情况。与安全性相关,最好限制每个环境的可用信息。每个环境只知道自己的设置。
    • 我同意你上面的评论。但不明白为什么你的答案中有这个“你应该使用 Maven 来选择要使用的 Spring 属性文件,具体取决于你正在构建的环境。” - 每个环境的单独构建过程是一种气味。
    【解决方案2】:

    为了记录,这是 OP 所关注的博客系列的作者在this comment 中写的:

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

    我最大的抱怨是 PropertyPlaceholderConfigurer是那个 你只能拥有一个 PropertyPlaceholderConfigurer豆。 而且没有很好的记录。

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

    我更喜欢 maven 的另一个原因 过滤器是你可以用它们做一个 'mvn package' 然后戳进来 目标目录和眼球 过滤配置文件,看看它是什么 做过。随着春天的 PropertyPlaceholderConfigurer你 不知道什么被替换了 直到应用启动。

    我赞同这个观点,并且在运行我的测试时更喜欢使用过滤器方法而不是使用 PropertyPlaceholderConfigurer 和 Antrun 插件将 test.properties 复制到 application.properties 中。所有主要 IDE(Eclipse、IntelliJ、NetBeans)都很好地支持使用过滤资源,所以我不明白为什么不应该使用它。

    【讨论】:

    • 我更喜欢使用 Spring 的 元素,因为我不是全局属性的忠实粉丝。
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2012-02-15
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多