You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BASH或XMLStarlet修改XML中MySQL连接的密码

批量修改Java应用XML中MySQL连接密码的方案

方案一:使用XMLStarlet(推荐)

XMLStarlet是专门的XML命令行处理工具,能精准定位XML节点,避免正则匹配XML带来的格式兼容风险,适合长期维护场景。

1. 安装XMLStarlet

根据系统包管理器安装:

  • Debian/Ubuntu系:
sudo apt-get install xmlstarlet
  • RHEL/CentOS系:
sudo yum install xmlstarlet

2. 针对两种数据源的修改命令

处理HikariCP类型数据源(通过addDataSourceProperty配置密码)

命令会精准定位到MySQL(jdbc/MySQL)对应的Hikari配置块,替换密码:

xmlstarlet ed -P -S -L \
--update '//Call[@name="addService"]/Arg/New[@class="org.mortbay.jetty.plus.DefaultDataSourceService"]/Call[@name="addDataSource"][Arg="jdbc/MySQL"]/Arg/New[@class="com.zaxxer.hikari.HikariDataSource"]/Arg/New[@class="com.zaxxer.hikari.HikariConfig"]/Call[@name="addDataSourceProperty"][Arg="password"]/Arg[2]' \
--value "new_mysql_password" \
your_xml_file.xml

处理BoneCP类型数据源(直接通过Set配置密码)

定位到MySQL对应的BoneCP配置块替换密码:

xmlstarlet ed -P -S -L \
--update '//Call[@name="addService"]/Arg/New[@class="org.mortbay.jetty.plus.DefaultDataSourceService"]/Call[@name="addDataSource"][Arg="jdbc/MySQL"]/Arg/New[@class="com.jolbox.bonecp.BoneCPDataSource"]/Set[@name="password"]' \
--value "new_mysql_password" \
your_xml_file.xml

批量处理所有XML文件

如果要一次性修改当前目录下所有.xml文件,执行以下脚本:

for file in *.xml; do
  # 修HikariCP密码
  xmlstarlet ed -P -S -L \
  --update '//Call[@name="addService"]/Arg/New[@class="org.mortbay.jetty.plus.DefaultDataSourceService"]/Call[@name="addDataSource"][Arg="jdbc/MySQL"]/Arg/New[@class="com.zaxxer.hikari.HikariDataSource"]/Arg/New[@class="com.zaxxer.hikari.HikariConfig"]/Call[@name="addDataSourceProperty"][Arg="password"]/Arg[2]' \
  --value "new_mysql_password" \
  "$file"

  # 修改BoneCP密码
  xmlstarlet ed -P -S -L \
  --update '//Call[@name="addService"]/Arg/New[@class="org.mortbay.jetty.plus.DefaultDataSourceService"]/Call[@name="addDataSource"][Arg="jdbc/MySQL"]/Arg/New[@class="com.jolbox.bonecp.BoneCPDataSource"]/Set[@name="password"]' \
  --value "new_mysql_password" \
  "$file"
done

参数说明:

  • -ed:进入编辑模式
  • -P:保留原XML的格式(不自动重新排版)
  • -S:保留原文件的空格缩进
  • -L:直接修改原文件(若需保留原文件备份,去掉-L后将输出重定向到新文件即可)

方案二:使用BASH + sed(快速临时处理)

sed适合XML格式固定、无复杂嵌套变化的场景,注意:如果XML的缩进、换行格式发生变化,该命令可能失效,且可能误改非MySQL连接的密码块。

1. 处理HikariCP类型数据源

匹配addDataSourceProperty下的密码节点并替换:

sed -i '/<Call name="addDataSourceProperty">/,/<\/Call>/ {
  /<Arg>password<\/Arg>/ {
    n
    s/<Arg>.*<\/Arg>/<Arg>new_mysql_password<\/Arg>/
  }
}' your_xml_file.xml

2. 处理BoneCP类型数据源

直接匹配密码配置行替换:

sed -i 's/<Set name="password">.*<\/Set>/<Set name="password">new_mysql_password<\/Set>/g' your_xml_file.xml

3. 批量处理所有XML文件

for file in *.xml; do
  # 处理HikariCP密码
  sed -i '/<Call name="addDataSourceProperty">/,/<\/Call>/ {
    /<Arg>password<\/Arg>/ {
      n
      s/<Arg>.*<\/Arg>/<Arg>new_mysql_password<\/Arg>/
    }
  }' "$file"

  # 处理BoneCP密码
  sed -i 's/<Set name="password">.*<\/Set>/<Set name="password">new_mysql_password<\/Set>/g' "$file"
done

注意:

  • -i:直接修改原文件(部分Linux发行版需使用-i.bak生成原文件的备份)

内容的提问来源于stack exchange,提问作者supmethods

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:20:39