1、配置文件
application.properties
#源数据库配置
spring.datasource.source.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.source.jdbc-url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.source.username=test1
spring.datasource.source.password=123456
#目标数据库配置
spring.datasource.target.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.target.jdbc-url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.target.username=test2
spring.datasource.target.password=123456
#配置连接超时时间,单位ms
spring.datasource.hikari.connection-timeout=30000
#连接允许在池中闲置的最长时间,单位ms
spring.datasource.hikari.idle-timeout=30000
#池中连接最长生命周期,单位ms
spring.datasource.hikari.max-lifetime=1800000
#池中最大连接数,包括闲置和使用中的连接
spring.datasource.hikari.maximum-pool-size=30
#池中维护的最小空闲连接数
spring.datasource.hikari.minimum-idle=10
2、数据库通用配置类
DataSourceConfig
package com.steven.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties
public class DataSourceConfig {
@Value("${spring.datasource.hikari.connection-timeout}")
private long connectionTimeout;
@Value("${spring.datasource.hikari.idle-timeout}")
private long idleTimeout;
@Value("${spring.datasource.hikari.max-lifetime}")
private long maxLifetime;
@Value("${spring.datasource.hikari.maximum-pool-size}")
private int maximumPoolSize;
@Value("${spring.datasource.hikari.minimum-idle}")
private int minimumIdle;
public long getConnectionTimeout() {
return connectionTimeout;
}
public void setConnectionTimeout(long connectionTimeout) {
this.connectionTimeout = connectionTimeout;
}
public long getIdleTimeout() {
return idleTimeout;
}
public void setIdleTimeout(long idleTimeout) {
this.idleTimeout = idleTimeout;
}
public long getMaxLifetime() {
return maxLifetime;
}
public void setMaxLifetime(long maxLifetime) {
this.maxLifetime = maxLifetime;
}
public int getMaximumPoolSize() {
return maximumPoolSize;
}
public void setMaximumPoolSize(int maximumPoolSize) {
this.maximumPoolSize = maximumPoolSize;
}
public int getMinimumIdle() {
return minimumIdle;
}
public void setMinimumIdle(int minimumIdle) {
this.minimumIdle = minimumIdle;
}
}
3、各个数据源配置类
SourceDataSourceConfig
package com.steven.config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
public class SourceDataSourceConfig {
@Value("${spring.datasource.source.jdbc-url}")
private String jdbcUrl;
@Value("${spring.datasource.source.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.source.username}")
private String username;
@Value("${spring.datasource.source.password}")
private String password;
@Autowired
private DataSourceConfig dataSourceConfig;
@Bean(name = "sourceDataSource")
@Qualifier("sourceDataSource")
public DataSource sourceDataSource() {
//里面指定数据库连接池的类型
HikariConfig config = new HikariConfig();
config.setDriverClassName(driverClassName);
config.setUsername(username);
config.setPassword(password);
config.setJdbcUrl(jdbcUrl);
config.setConnectionTimeout(dataSourceConfig.getConnectionTimeout());
config.setIdleTimeout(dataSourceConfig.getIdleTimeout());
config.setMaxLifetime(dataSourceConfig.getMaxLifetime());
config.setMaximumPoolSize(dataSourceConfig.getMaximumPoolSize());
config.setMinimumIdle(dataSourceConfig.getMinimumIdle());
return new HikariDataSource(config);
//使用以下方式创建数据库连接池,会使用默认的tomcat-jdbc
//return DataSourceBuilder.create().build();
}
@Bean(name = "sourceJdbcTemplate")
public JdbcTemplate sourceJdbcTemplate(@Qualifier("sourceDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
TargetDataSourceConfig
package com.steven.config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
public class TargetDataSourceConfig {
@Value("${spring.datasource.target.jdbc-url}")
private String jdbcUrl;
@Value("${spring.datasource.target.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.target.username}")
private String username;
@Value("${spring.datasource.target.password}")
private String password;
@Autowired
private DataSourceConfig dataSourceConfig;
@Bean(name = "targetDataSource")
@Qualifier("targetDataSource")
@Primary
public DataSource targetDataSource() {
//里面指定数据库连接池的类型
HikariConfig config = new HikariConfig();
config.setDriverClassName(driverClassName);
config.setUsername(username);
config.setPassword(password);
config.setJdbcUrl(jdbcUrl);
config.setConnectionTimeout(dataSourceConfig.getConnectionTimeout());
config.setIdleTimeout(dataSourceConfig.getIdleTimeout());
config.setMaxLifetime(dataSourceConfig.getMaxLifetime());
config.setMaximumPoolSize(dataSourceConfig.getMaximumPoolSize());
config.setMinimumIdle(dataSourceConfig.getMinimumIdle());
return new HikariDataSource(config);
//使用以下方式创建数据库连接池,会使用默认的tomcat-jdbc
//return DataSourceBuilder.create().build();
}
@Bean(name = "targetJdbcTemplate")
@Primary
public JdbcTemplate targetJdbcTemplate(@Qualifier("targetDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}