微服务配置多数据源(Mysql+Clickhouse)
工程目录

maven依赖引用
- 默认mysql依赖已经引用
- clickhouse依赖引用
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>0.3.2</version>
</dependency>
排除自动注入的
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
MybatisAutoConfiguration.class})
public class JuventusApplication {
public static void main(String[] args) {
SpringApplication.run(JuventusApplication.class, args);
}
}
msyql数据源配置文件
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
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.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
@MapperScan(basePackages = "com.chinamobile.epic.juventus.dao", sqlSessionTemplateRef = "primarySqlSessionTemplate")
public class MysqlDataSourceConfig {
@Value("${spring.datasource.driver-class-name}")
private String driverName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String userName;
@Value("${spring.datasource.password}")
private String password;
@Bean("dataSource1")
public HikariDataSource getDataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName(driverName);
dataSource.setJdbcUrl(url);
dataSource.setUsername(userName);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "primaryTransactionManager")
public DataSourceTransactionManager dataSourceTransactionManager(HikariDataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("dataSource1") HikariDataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
// 指定数据源
factoryBean.setDataSource(dataSource);
// 指定mapper xml路径
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] mapperXml = resolver.getResources("classpath:mybatis/*.xml");
factoryBean.setTypeAliasesPackage("com.chinamobile.epic.juventus.dao");
factoryBean.setMapperLocations(mapperXml);
return factoryBean.getObject();
}
@Bean(name = "primarySqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate1(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
clickhouse配置文件
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
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.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.chinamobile.epic.juventus.clickhouse", sqlSessionTemplateRef = "thirdSqlSessionTemplate")
public class ClickDataSourceConfig {
@Value("${spring.datasource.clickhouse.driver-class-name}")
private String driverName1;
@Value("${spring.datasource.clickhouse.url}")
private String url1;
@Value("${spring.datasource.clickhouse.username}")
private String userName1;
@Value("${spring.datasource.clickhouse.password}")
private String password1;
@Bean("thirdDataSource")
public PooledDataSource getDataSource1() {
UnpooledDataSource source = new UnpooledDataSource();
source.setDriver(driverName1);
source.setUrl(url1);
source.setUsername(userName1);
source.setPassword(password1);
PooledDataSource pooledDataSource = new PooledDataSource(source);
return pooledDataSource;
}
@Bean(name = "thirdSqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean1(@Qualifier("thirdDataSource") PooledDataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
// 指定数据源
factoryBean.setDataSource(dataSource);
// 指定mapper xml路径
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] mapperXml = resolver.getResources("classpath:clickhouse/*.xml");
factoryBean.setTypeAliasesPackage("com.chinamobile.epic.juventus.clickhouse");
factoryBean.setMapperLocations(mapperXml);
return factoryBean.getObject();
}
@Bean(name = "thirdTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("thirdDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "thirdSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("thirdSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
属性配置
spring.datasource.url=jdbc:mysql://ip:port/juventus?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=xxx(根据实际情况设置)
spring.datasource.password=xxx(根据实际情况设置)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.clickhouse.driver-class-name=ru.yandex.clickhouse.ClickHouseDriver
spring.datasource.clickhouse.url=jdbc:clickhouse://ip:port/
spring.datasource.clickhouse.username=xxx(根据实际情况设置)
spring.datasource.clickhouse.password=xxx(根据实际情况设置)
spring.datasource.clickhouse.initialSize=10
spring.datasource.clickhouse.maxActive=100
spring.datasource.clickhouse.minIdle=10
spring.datasource.clickhouse.maxWait=6000
转载请标明出处:http://www.cnblogs.com/ssslinppp/

浙公网安备 33010602011771号