【发布时间】:2020-03-23 22:15:48
【问题描述】:
我的代码是用 Java 编写的,我使用 Spring JDBC 模板来访问 MySQL 数据库。
我的系统是一个多租户,每个租户在 MySQL 中都有自己的专用架构(例如“tenant_1”、“tenant_2”等)。
这是初始化数据库连接的方式:
在引导期间,我创建了一个暴露 DataSourceTransactionManager 的 bean,它由配置了 MySQL 数据库连接字符串的 DataSource 初始化(不指定架构)。
由于我的系统是多租户的,因此对于每个请求,我必须选择给定租户的架构。因此,典型的查询如下所示:
- “使用租户_xxx”
- ....
问题:
不时(1 到数千次处决),我得到了
java.sql.SQLException:未选择数据库。
我仔细检查了我的代码 - 实际上,我总是在执行查询之前选择架构。
有什么想法吗?
- Spring - 最新版本 (5.x)
- Java - 11
- MySQL (5.7),在本地 MySQL 和 AWS Aurora 上复制
更新:添加更多信息
- 我使用 Spring Boot,默认使用 HikariCP
- 我注意到代码中随机位置的问题,所以很可能它不是 我的代码中特定位置的错误
更新 2:
- 连接器/J 版本 8.0
【问题讨论】:
标签: java mysql spring spring-jdbc