springmodule.xml中因数据库密码含&引发SAXParseException的解决咨询
解决Spring XML中密码含&导致的解析错误
核心原因
XML语法里&是特殊字符,必须转义为&才能被正确解析。你之前在pom.xml中用&是因为Maven的pom会做二次转义,但Spring XML仅需单次转义,不需要双重处理。
具体解决方案
根据你的配置场景,分三种方式处理:
1. 外部properties文件配置(当前${DB_PASS}场景)
如果DB_PASS定义在.properties配置文件中,不需要在properties里转义&,直接写原始密码(比如pass&123)即可。Spring加载占位符时会自动处理XML特殊字符,不会触发解析错误。
2. XML硬编码密码
如果是直接在XML里写死密码,必须把&替换为&:
<property name="password" value="pass&123"/>
3. Spring EL动态转义(兜底方案)
如果无法修改原始密码配置,可通过Spring表达式语言动态替换&:
<property name="password" value="#{T(java.lang.String).valueOf('${DB_PASS}').replace('&', '&')}"/>
优先推荐前两种更简洁的方式,此方案仅作为特殊场景的备选。
注意事项
- 不要沿用pom.xml的
&amp;写法,Spring XML只会解析一次转义,双重转义会让最终密码出现&而非原始的&。 - 若使用Spring Boot,建议将数据库配置放在
application.properties或application.yml中,YAML对特殊字符的兼容性更好,直接写&即可。
内容的提问来源于stack exchange,提问作者Nidhi257
相关产品推荐
相关产品推荐

