作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在谷歌上查找该问题,但无法找到解决方案。
我想要实现的目标
请参阅下面的代码,我想做的是将加密密码传递给 MethodInvokingBean
,它使用 com.xxxxxxx.CryptoUtil
解密使用静态方法 decrypt
.
解密后的值被注入(inject)masterDBDatasource
通过<property name="password" ref="decryptedDBPassword" />
,但它不起作用。
<bean id="decryptedDBPassword" class="org.springframework.beans.factory.config.MethodInvokingBean">
<property name="targetClass" value="com.xxxxxxx.CryptoUtil"/>
<property name="targetMethod" value="decrypt"/>
<property name="arguments" value="${encrypted.db.password}" />
</bean>
<bean id="masterDBDatasource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${db.driver.class}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" ref="decryptedDBPassword" />
</bean>
异常
org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.springframework.beans.factory.config.MethodInvokingBean' to required type 'java.lang.String' for property 'password'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.beans.factory.config.MethodInvokingBean] to required type [java.lang.String] for property 'password': no matching editors or conversion strategy found
我按照以下教程作为引用
https://www.mkyong.com/spring/spring-methodinvokingfactorybean-example/
我也尝试过<property name="password" value="decryptedDBPassword" />
但数据库连接说 - 由于密码无效,访问被拒绝。
请帮忙。
最佳答案
发布我的问题代码的确切答案,作为可能面临类似问题的其他人的引用。
根据@Matt的提示,我使用 SPeL 进行了如下最终配置(不使用 MethodInvokingBean
)
<bean id="masterDBDatasource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${db.driver.class}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value='#{T(com.xxxxxxx.CryptoUtil).decrypt("${encrypted.db.password}")}' />
</bean>
关于java - Spring MethodInvokingBean - DriverManagerDataSource 不接受返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690609/
我尝试在谷歌上查找该问题,但无法找到解决方案。 我想要实现的目标 请参阅下面的代码,我想做的是将加密密码传递给 MethodInvokingBean ,它使用 com.xxxxxxx.CryptoUt
我是一名优秀的程序员,十分优秀!