我需要为SpringBoot应用程序设置两个数据源。目前,在MariaDB服务器上处理(成功)超时的单个Datasource工作解决方案在application.properties中设置了以下三个参数
# Keep the connection alive if idle for a long time (needed in production)
spring.datasource.testWhileIdle = true
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.validationQuery = SELECT 1
我使用基于Java的数据源配置检查的各种示例通常如下:
@Primary
@Bean
public DataSource userDataSource() {
DriverManagerDataSource dataSource
= new DriverManagerDataSource();
dataSource.setDriverClassName(
env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("user.jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
问题是我不知道如何使用Datasource类设置testWhileIdle和validationQuery,因为没有相应的方法,我在MariaDB文档中没有看到任何可以作为JDBC URL的一部分传递的相关选项
答案 0 :(得分:1)
如果您在Tomcat中使用Spring Boot,那么它将使用org.apache.commons.dbcp.BasicDataSource
而不是DriverManagerDataSource
。更改您的dataSource方法以返回BasicDataSource
,其中包含设置testWhileIdle
和validationQuery
的方法。
@Primary
@Bean
public DataSource userDataSource() {
BasicDataSource dataSource
= new BasicDataSource();
dataSource.setDriverClassName(
env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("user.jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
dataSource.setTestWhileIdle(env.getProperty("jdbc.testWhileIdle"));
dataSource.setValidationQuery(env.getProperty("jdbc.validationQuery"));
return dataSource;
}
答案 1 :(得分:1)
...
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
...
@Primary
@Bean
public DataSource dataSource() {
DataSourceBuilder factory = DataSourceBuilder
.create()
.url(...)
.username(...)
.password(...)
.driverClassName(...);
return factory.build();
}
...