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