用于多租户系统的Spring验证查询

时间:2018-07-21 14:35:26

标签: java spring connection

我有一个在MySQL数据库上运行的多租户spring boot应用程序,具有针对单个租户的单独架构。 dataSource通过在运行时传递标头代码来确定。如何确保在这样的系统中连接不会断开?一旦系统的不活动时间超过了设置的时间,就需要运行“ SELECT 1”命令,并且该命令不会为系统指定任何要连接的数据源,因此,系统将引发sql异常。

这是我的配置属性:

  

spring.datasource.url = jdbc:mysql:// xxxxxxxx / xxx?useUnicode = true&characterEncoding = utf8&useSSL = false&autoReconnect = true   spring.datasource.driver-class-name = com.mysql.jdbc.Driver   spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL57InnoDBDialect   spring.jpa.database = MYSQL spring.jpa.hibernate.ddl-auto =验证   spring.datasource.test-on-borrow = true spring.datasource.testWhileIdle   = true spring.datasource.timeBetweenEvictionRunsMillis = 60000 spring.datasource.validation-query =选择1   spring.datasource.tomcat.max-wait = 10000   spring.datasource.tomcat.max-active = 50   spring.datasource.tomcat.test-on-borrow = true   spring.jpa.properties.hibernate.current_session_context_class = org.springframework.orm.hibernate4.SpringSessionContext hibernate.c3p0.max_size = 20 hibernate.c3p0.min_size = 5   hibernate.c3p0.idle_test_period = 600

1 个答案:

答案 0 :(得分:0)

我发现,一旦有了hibernate.multiTenancy=DATABASE设置,在 application.properties 文件中指定的数据源验证查询设置将不会起作用,因为我们需要拦截getConnection以编程方式调用并解决“数据源”租户。因此,我使用扩展的CustomMultiTenantConnectionProviderImpl解决了它,该扩展实现了MultiTenantConnectionProvider接口,并覆盖了getConnectionreleaseConnection方法的定义以完成所需的操作。现在,我的连接已得到正确验证。