springboot多数据源支持

mybatis+多数据源+多连接池配置

网上大多配置都是mybatis+多数据源,并没有对应的多数据池,这里列举一个完整的例子,废话不多说,直接看代码

1.pom.xml

pom里只用增加一个mybatis整合spring-boot的依赖:

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
2.配置文件

配置文件里,一般情况下不同的环境数据库是分开的所有有两个配置文件,这里假设有两个数据源,分别为a,b

  • application-test.yml

    spring: 
      datasource: 
        a: 
          url: jdbc:mysql://localhost:3306/a
          username: a
          password: a
        b: 
          url: jdbc:mysql://localhost:3307/b
          username: b
          password: b
        tomcat: 
          initial-size: 1
          min-idle: 1
          max-idle: 1
          max-active: 1
    
  • application-online.yml

    spring: 
      datasource: 
        a: 
          url: jdbc:mysql://localhost:3306/a
          username: a
          password: a
        b: 
          url: jdbc:mysql://localhost:3307/b
          username: b
          password: b
        tomcat: 
          initial-size: 1
          min-idle: 3
          max-idle: 20
          max-active: 20
          max-wait: 60000
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          validation-query: SELECT\u00201
          time-between-eviction-runs-millis: 30000
          min-evictable-idle-time-millis: 1800000
          num-tests-per-eviction-run: 20
          remove-abandoned: true
          remove-abandoned-timeout: 180
          log-abandoned: true
    

上面两个配置,spring.datasource.a和spring.datasource.b是两个数据源的配置。

spring.datasource.tomcat是数据源连接池的配置。

当然,如果测试和线上都是用的一套数据库的话,可以直接在application.yml配置数据源,而在相应的application-{env}.yml里配置连接池

3.java类
  • 为了注入每个数据源的配置,创建一个公共类:

    public class CommonDataSourceConfiguration {
    	private String url;
    	private String username;
    	private String password;
    	省略get/set
    }
    
  • 第一个数据源配置:

    @Configuration
    @ConfigurationProperties(prefix = "spring.datasource.a")
    @MapperScan(basePackages = { "com.sohu.tv.dao.a" }, sqlSessionTemplateRef = "aSqlSessionTemplate")
    public class ADataSourceConfiguration extends CommonDataSourceConfiguration {
    	@Primary
      	@Bean(name = "aDataSource")
    	@ConfigurationProperties(prefix = "spring.datasource.tomcat")
    	public DataSource aDataSource() {
    		return DataSourceBuilder.create()
    			.url(getUrl())
    			.username(getUsername())
    			.password(getPassword()).build();
    	}
    
    	@Bean(name = "aSqlSessionFactory")
    	public SqlSessionFactory sqlSessionFactory(@Qualifier("aDataSource") DataSource dataSource) throws Exception {
    		SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    		sessionFactory.setDataSource(dataSource);
    		return sessionFactory.getObject();
    	}
    
    	@Bean(name = "aSqlSessionTemplate")
    	public SqlSessionTemplate sqlSessionTemplate(@Qualifier("aSqlSessionFactory") SqlSessionFactory sqlSessionFactory)
    			throws Exception {
    		return new SqlSessionTemplate(sqlSessionFactory);
    	}
    }
    
    • 这里,在ADataSourceConfiguration上标注ConfigurationProperties(prefix = “spring.datasource.a”),

      这样可以把数据源的username等注入到CommonDataSourceConfiguration的属性中。

    • 而aDataSource()上标注ConfigurationProperties(prefix = “spring.datasource.tomcat”),

      可以把连接池的配置注入到DataSource中。

    • MapperScan(basePackages = { “com.sohu.tv.dao.a” },这里指定的会扫描com.sohu.tv.dao.a的包。

    • 如果不同的数据源需要使用不同的连接池配置,可以按照如下配置即可:

      1. 配置文件

        spring: 
          datasource: 
            a: 
              url: jdbc:mysql://localhost:3306/a
              username: a
              password: a
              initial-size: 1
              min-idle: 3
        
      2. java类(当然,外部配置类上就不用再标注ConfigurationProperties了)

        @Bean(name = "aDataSource")
        @ConfigurationProperties(prefix = "spring.datasource.a")
        public DataSource aDataSource() {
        	return DataSourceBuilder.create()
        		.url(getUrl())
        		.username(getUsername())
        		.password(getPassword()).build();
        }
        

  • 第二个数据源配置:

    可以参照第一个类。

  • 包结构类似如下:

    com.sohu.tv.dao.a
    com.sohu.tv.dao.b
    

  • 这样配置完以后,相应包下的dao将自动使用对应的数据源配置。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值