基于模式的多租户:有时会获取“ java.sql.SQLException:未选择数据库”

问题描述 投票:0回答:2

我的代码是用Java编写的,并且我使用Spring JDBC模板访问MySQL数据库。

我的系统是一个多租户,每个租户在MySQL中都有自己的专用模式(例如“ tenant_1”,“ tenant_2”等)。

这是初始化数据库连接的方式:

在引导过程中,我创建了一个暴露DataSourceTransactionManager的bean,该bean由配置有MySQL数据库的连接字符串的DataSource初始化(未指定架构)。

由于我的系统是多租户,因此对于每个请求,我必须选择给定租户的架构。因此,典型查询如下所示:

  1. “” USE tenant_xxx“
  2. ....

问题:

我不时得到(1至数千次处决)

java.sql.SQLException:未选择数据库。

我仔细检查了我的代码-实际上,我总是在执行查询之前选择架构。

有什么想法吗?

  • Spring-最新版本(5.x)
  • Java-11
  • MySQL(5.7),在本地MySQL和AWS Aurora上均已复制

更新:添加更多信息

  • 我使用Spring Boot,默认情况下使用HikariCP
  • 我注意到该问题出现在代码中的随机位置,因此很可能不是我的代码中特定位置的错误。
  • 更新2:

  • Connector / J版本8.0

我的代码用Java编写,我使用Spring JDBC模板访问MySQL数据库。我的系统是一个多租户,每个租户在MySQL中都有自己的专用架构(例如“ tenant_1”,“ tenant_2”,...

java mysql spring spring-jdbc
2个回答
1
投票

[很多事情可能出错,我会尝试提供一些一般性的想法,希望其中一些会有用。


1
投票

如果您有用于连接池的配置资料,请提供。

© www.soinside.com 2019 - 2024. All rights reserved.