我想使用操作系统系统变量${appuserpwd}将 Java @DataSourceDefinition 的密码外部化。以下是我的@DataSourceDefinition
@DataSourceDefinition(
name = "java:app/jdbc/mydb",
className = "com.mysql.cj.jdbc.MysqlConnectionPoolDataSource",
portNumber = 3306,
serverName = "localhost",
databaseName = "mydb",
user = "appuser",
password = "${appuserpwd}",
isolationLevel = Connection.TRANSACTION_READ_COMMITTED,
properties = {})
我正在使用 Wildfly 18。在子系统 ee 中,我已经打开了这些属性:
Annotation Property Replacement: ON
JBoss Descriptor Property Replacement: ON
Spec Descriptor Property Replacement: ON
我总是收到如下异常错误:
Caused by: java.sql.SQLException: Access denied for user 'appuser'@'localhost' (using password: YES)
这意味着 Wildfly 未能将 ${appuserpwd} 从名为 appuserpwd 的操作系统系统环境中转换为真实密码。
我试过${env.appuserpwd}作为@DataSourceDefinition 密码,但我得到了同样的信息。
如果我用 appuser 真实密码替换 ${appuserpwd} -> 该应用程序运行正常,没有问题。
有什么帮助吗?谢谢!