如何通过属性或Registry为WSO2 dblookup mediator配置数据库密码
解决方案
方案1:通过上下文属性动态设置密码
dblookup mediator支持通过XPath表达式读取消息上下文属性,你可以先从其他动态源(比如接口请求参数、配置中心拉取结果)把密码存入上下文属性,再注入到连接配置中:
- 操作步骤:
- 在dblookup节点前添加属性节点,存储你动态获取的数据库密码
- 把原password节点的固定值替换为expression属性,调用get-property函数读取上下文属性
- 完整配置示例:
<!-- 提前把动态获取的密码存入上下文属性,也可以从其他源动态赋值 --> <property name="db.password" scope="default" type="STRING" value="动态获取的最新密码"/> <dblookup> <connection> <pool> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://localhost:3306/school_db</url> <user>root</user> <!-- 通过表达式读取上下文属性作为密码 --> <password expression="get-property('db.password')"/> </pool> </connection> <statement> <sql><![CDATA[select * from students]]></sql> <result column="grade" name="grade"/> </statement> </dblookup>
方案2:通过Registry配置存储密码(更适合密码频繁变更场景)
你可以把数据库配置存到Registry中,后续密码变更只需要修改Registry里的配置内容,不需要修改序列/API的代码:
- 操作步骤:
- 登录管理控制台,进入Registry浏览器,在
conf:/路径下创建自定义目录,比如conf:/custom/db-config/ - 在该目录下创建properties类型资源,命名为
mysql-school-db.properties,写入以下内容:
db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/school_db db.user=root db.password=最新的数据库密码- 修改dblookup配置,通过表达式读取Registry中的配置值
- 登录管理控制台,进入Registry浏览器,在
- 完整配置示例:
<dblookup> <connection> <pool> <driver expression="get-property('registry', 'conf:/custom/db-config/mysql-school-db.properties@db.driver')"/> <url expression="get-property('registry', 'conf:/custom/db-config/mysql-school-db.properties@db.url')"/> <user expression="get-property('registry', 'conf:/custom/db-config/mysql-school-db.properties@db.user')"/> <password expression="get-property('registry', 'conf:/custom/db-config/mysql-school-db.properties@db.password')"/> </pool> </connection> <statement> <sql><![CDATA[select * from students]]></sql> <result column="grade" name="grade"/> </statement> </dblookup>
提示:如果需要避免明文存储密码,可以结合安全保险箱(Secure Vault)功能对Registry内的密码做加密存储,读取方式不变。
内容的提问来源于stack exchange,提问作者Anas Altarazi
相关产品推荐
相关产品推荐

