博客
关于我
spring配置文件中<context:property-placeholder />的使用
阅读量:796 次
发布时间:2023-02-26

本文共 2174 字,大约阅读时间需要 7 分钟。

Spring Property Placeholder 配置问题及解决方法

在使用 Spring 的配置中心时,<context:property-placeholder/> 是一个非常实用的工具。它能够通过简单的 XML 配置,方便地读取外部属性文件中的配置信息。然而,在实际应用中,特别是多个模块协同工作时,可能会遇到一些常见问题。本文将详细介绍这些问题及其解决方法。


一、问题描述

假设我们有两个模块:A 模块和 B 模块。每个模块都有自己的 Spring XML 配置文件,并分别引用了自己的配置文件。A 模块的配置文件如下:

${modulea.jdbc.driverClassName}

${modulea.jdbc.url}

${modulea.jdbc.username}

${modulea.jdbc.password}

对应的配置文件 conf/conf_a.properties 内容如下:

modulea.jdbc.driverClassName=com.mysql.jdbc.Driver
modulea.jdbc.username=cartan
modulea.jdbc.password=superman
modulea.jdbc.url=jdbc:mysql://127.0.0.1:3306/modulea?useUnicode=true&characterEncoding=utf8

同样,B 模块的配置文件如下:

${moduleb.jdbc.driverClassName}

${moduleb.jdbc.url}

${moduleb.jdbc.username}

${moduleb.jdbc.password}

对应的配置文件 conf/conf_b.properties 内容如下:

moduleb.jdbc.driverClassName=com.mysql.jdbc.Driver
moduleb.jdbc.username=cartan
moduleb.jdbc.password=superman
moduleb.jdbc.url=jdbc:mysql://127.0.0.1:3306/modulea?useUnicode=true&characterEncoding=utf8

二、问题出现原因

当将 A 和 B 两个模块集成到同一个 Spring 容器中运行时,可能会遇到以下错误:

Could not resolve placeholder 'moduleb.jdbc.driverClassName' in string value "${moduleb.jdbc.driverClassName}"

这个问题的根本原因在于 Spring 容器在发现多个 PropertyPlaceholderConfigurer Bean 时,会停止对剩余 Bean 的扫描。根据 Spring 的工作机制,容器只能定义一个 context:property-placeholder,否则会导致上述错误。


三、解决方法

为了解决这个问题,我们需要确保只定义一个 context:property-placeholder Bean。具体步骤如下:

  • 移除多余的 PropertyPlaceholder 配置

    只保留一个 context:property-placeholder,并确保其他模块通过其它方式加载配置文件。

  • 优化配置文件结构

    在主配置文件中引入多个模块的配置文件。例如,在主配置文件中添加如下内容:

  • 统一属性文件路径

    在各个模块的属性文件中,使用统一的属性名。例如,所有模块都使用 jdbc.url 而不是 modulea.jdbc.urlmoduleb.jdbc.url


  • 四、测试验证

    在优化配置后,重启 Spring 容器并验证是否正常启动。确保所有模块都能正确加载配置文件,并且没有错误提示。


    五、注意事项

    • 避免重复配置:确保只定义一个 context:property-placeholder,否则会导致配置文件加载失败。

    • 模块独立性:如果各模块之间有独立的配置需求,可以通过 import 标签将其他模块的配置文件加载到主配置文件中。

    • 属性文件一致性:所有模块的属性文件应使用相同的属性名,避免命名不一致导致的配置错误。


    通过以上方法,可以有效解决多个模块集成时的配置问题,确保 Spring 容器能够正常启动并加载所有模块。

    转载地址:http://kfvfk.baihongyu.com/

    你可能感兴趣的文章
    Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
    查看>>
    Oracle EBS环境下查找数据源(OAF篇)
    查看>>
    oracle Extract 函数
    查看>>
    Oracle GoldenGate Director安装和配置(无图)
    查看>>
    oracle ogg 单实例双向复制搭建(oracle-oracle)--Oracle GoldenGate
    查看>>
    oracle rac集群的东西之QQ聊天
    查看>>
    oracle scott趣事
    查看>>
    oracle script
    查看>>
    Oracle select表要带双引号的原因
    查看>>
    Oracle SOA Suit Adapter
    查看>>
    Oracle Spatial GeoRaster 金字塔栅格存储
    查看>>
    Oracle Spatial空间数据库建立
    查看>>
    UML— 活动图
    查看>>
    oracle sqlplus已停止工作,安装完成客户端后sqlplus报“段错误”
    查看>>
    Oracle Statspack分析报告详解(一)
    查看>>
    oracle tirger_在Oracle中,临时表和全局临时表有什么区别?
    查看>>
    oracle where 条件的执行顺序分析1
    查看>>
    Oracle 中的 decode
    查看>>
    oracle 使用leading, use_nl, rownum调优
    查看>>
    oracle 修改字段类型方法
    查看>>