1.application.yml配置文件,sqlserver、oracle、mysql三种不同类型数据库
# 数据源配置
hikari:
crm:
url: jdbc:sqlserver://172.00.00.00:00000;DatabaseName=xxxxxx
username: xxxxxx
password: xxxxxx
minimum-idle: 2
maximum-pool-size: 2
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
connection-test-query: select '1'
cti:
url: jdbc:oracle:thin:@172.00.00.000:00000/xxxxxx
username: xxxxxx
password: xxxxxx
minimum-idle: 5
maximum-pool-size: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
robot:
url: jdbc:mysql://000.00.00.00:0000/xxxxxx?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: xxxxxx
password: xxxxxx
minimum-idle: 10
maximum-pool-size: 20
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
connection-test-query: select 'x' from dual
2.文件配置类
CrmConfig文件,这是项目主配置类,使用到@Primary
@Configuration
@MapperScan(basePackages = CRMConfig.MAPPER_INTERFACE_LOCATION, sqlSessionFactoryRef = "crmSqlSessionFactory")
public class CRMConfig {
private static final String MAPPER_XML_LOCATION = "classpath:mapper/crm/*.xml";
static final String MAPPER_INTERFACE_LOCATION = "com.ttfund.crm.sync.dao.crm";
@Value("${hikari.crm.url}")
private String url;
@Value("${hikari.crm.username}")
private String username;
@Value("${hikari.crm.password}")
private String password;
@Value("${hikari.crm.minimum-idle}")
private Integer minimumIdle;
@Value("${hikari.crm.maximum-pool-size}")
private Integer maximumPoolSize;
@Value("${hikari.crm.connection-timeout}")
private Long connectionTimeout;
@Value("${hikari.crm.idle-timeout}")
private Long idleTimeout;
@Value("${hikari.crm.max-lifetime}")
private Long maxLifeTime;
@Value("${hikari.crm.connection-test-query}")
private String testSql;
@Bean("crmDataSource")
@Primary
public HikariDataSource dataSource() {
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setJdbcUrl(url);
hikariDataSource.setUsername(username);
hikariDataSource.setPassword(password);
hikariDataSource.setMinimumIdle(minimumIdle);
hikariDataSource.setMaximumPoolSize(maximumPoolSize);
hikariDataSource.setConnectionTimeout(connectionTimeout);
hikariDataSource.setMaxLifetime(maxLifeTime);
hikariDataSource.setIdleTimeout(idleTimeout);
hikariDataSource.setConnectionTestQuery(testSql);
return hikariDataSource;
}
@Bean(name = "crmTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource());
}
@Bean(name = "crmSqlSessionTemplate")
@Primary
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("crmSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "crmSqlSessionFactory")
@Primary
public SqlSessionFactory customSqlSessionFactory(@Qualifier("crmDataSource") HikariDataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
Interceptor[] plugins = new Interceptor[]{sqlPrintInterceptor()};
sessionFactoryBean.setPlugins(plugins);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_LOCATION));
return sessionFactoryBean.getObject();
}
/**
* 将要执行的sql进行日志打印(不想拦截,就把这方法注释掉)
*/
@Bean(name = "crmSqlPrintInterceptor")
public SqlPrintInterceptor sqlPrintInterceptor() {
return new SqlPrintInterceptor();
}
}
CtiConfig配置类
@Configuration
@MapperScan(basePackages = CtiConfig.MAPPER_INTERFACE_LOCATION, sqlSessionFactoryRef = "ctiSqlSessionFactory")
public class CtiConfig {
/**
* private static final String MAPPER_XML_LOCATION = "classpath:mapper/emdb/*.xml";
*/
static final String MAPPER_INTERFACE_LOCATION = "com.ttfund.crm.sync.dao.cti";
@Value("${hikari.cti.url}")
private String url;
@Value("${hikari.cti.username}")
private String username;
@Value("${hikari.cti.password}")
private String password;
@Value("${hikari.cti.minimum-idle}")
private Integer minimumIdle;
@Value("${hikari.cti.maximum-pool-size}")
private Integer maximumPoolSize;
@Value("${hikari.cti.connection-timeout}")
private Long connectionTimeout;
@Value("${hikari.cti.idle-timeout}")
private Long idleTimeout;
@Value("${hikari.cti.max-lifetime}")
private Long maxLifeTime;
@Bean("ctiDataSource")
public HikariDataSource dataSource() {
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setJdbcUrl(url);
hikariDataSource.setUsername(username);
hikariDataSource.setPassword(password);
hikariDataSource.setMinimumIdle(minimumIdle);
hikariDataSource.setMaximumPoolSize(maximumPoolSize);
hikariDataSource.setConnectionTimeout(connectionTimeout);
hikariDataSource.setMaxLifetime(maxLifeTime);
hikariDataSource.setIdleTimeout(idleTimeout);
return hikariDataSource;
}
@Bean(name = "ctiTransactionManager")
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource());
}
@Bean(name = "ctiSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("ctiSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "ctiSqlSessionFactory")
public SqlSessionFactory customSqlSessionFactory(@Qualifier("ctiDataSource") HikariDataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
Interceptor[] plugins = new Interceptor[]{sqlPrintInterceptor()};
sessionFactoryBean.setPlugins(plugins);
/***
* 注释,未启用
* sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_XML_LOCATION));
*/
return sessionFactoryBean.getObject();
}
/**
* 将要执行的sql进行日志打印(不想拦截,就把这方法注释掉)
*/
@Bean(name = "ctiSqlPrintInterceptor")
public SqlPrintInterceptor sqlPrintInterceptor() {
return new SqlPrintInterceptor();
}
}
3.目录结构