我正在寻找一个Java数据库连接池,允许我为我的Aurora MySQL使用AWS IAM数据库身份验证。该池应该能够工作Tomcat context.xml文件。
我看过Tomcat DBCP,dbcp2,HikariCP和c3p0。但他们似乎都认为用户名和密码在应用程序启动时是已知的,并且在应用程序的生命周期中不会改变。
对于IAM数据库身份验证,凭据每15分钟更改一次,因此每当创建新连接时,池都需要向AWS IAM请求新凭据(凭证可以缓存几分钟)。
这是在任何Java连接池中实现的吗?或者您对如何使其发挥作用有所了解?
我最近遇到了同样的问题....我使用HikariCP连接池,直到现在它还没有支持。幸运的是,我找到了一个使用此工具的PR:
https://github.com/brettwooldridge/HikariCP/pull/1335
我建议您制作项目分支并使用它,直到官方存储库接受此PR。
我的实现:
public DataSource setup() throws Exception {
Supplier<String> passwordSupplier = () -> {
return this.generateAuthToken(host, port, user);
};
com.zaxxer.hikari.HikariDataSource dataSource = new com.zaxxer.hikari.HikariDataSource();
dataSource.setPasswordSupplier(passwordSupplier); ...
在您的池配置中包含以下内容非常重要:
dataSource.setMaxLifetime(15 * 60 * 1000);
因为您的游泳池连接使用RDS Iam Auth不能超过15分钟
祝好运。