多租户系统的Spring验证查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多租户系统的Spring验证查询相关的知识,希望对你有一定的参考价值。
我有一个在mysql数据库上运行的多租户Spring启动应用程序,它有单独的租户模式。 dataSource
是通过在运行时传递头代码来决定的。如何确保连接不会在这样的系统中丢失?一旦系统的不活动超过设定的时间,“SELECT 1”命令需要运行,并且没有向系统指定要连接到哪个dataSource的任何内容,因此系统会抛出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 = validate spring.datasource.test-on-borrow = true spring.datasource.testWhileIdle = true spring.datasource.timeBetweenEvictionRunsMillis = 60000 spring.datasource.validation-query = SELECT 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
我发现只要我们有hibernate.multiTenancy=DATABASE
设置,application.properties文件中指定的数据源验证查询设置将不会产生任何影响,因为我们需要拦截getConnection
调用并以编程方式解析“数据源”租户。因此,我使用扩展的CustomMultiTenantConnectionProviderImpl
解决了它,它实现了MultiTenantConnectionProvider
接口并覆盖了getConnection
和releaseConnection
方法的定义,以便做必要的事情。现在我的连接正在被正确验证。
以上是关于多租户系统的Spring验证查询的主要内容,如果未能解决你的问题,请参考以下文章