ssslinppp

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

微服务配置多数据源(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
posted on 2022-09-13 14:36  ssslinppp  阅读(835)  评论(0)    收藏  举报