Spring Data JDBC如何配置多数据源

💥Spring Data JDBC 如何配置多数据源??

⚡️作为一个Java开发者,如果经常关注Spring社区的话,会发现一个持久层框架Spring Data JDBC,只需简单的配置数据源,一个注解,一个接口,就能够直接访问数据库,并且配合IDEA内置的插件,能够在反射阶段根据方法名自动的生成对应的SQL,对于一些轻量级的服务,能够很好的起到开箱即用的功能,那么对于这一套框架,如何配置多数据源呢?

⚡️下面的Demo,博主用了两个数据源,分别为sexytea-pro-rdsexytea-test-all两个。

⚡️首先先上配置文件application.yml

spring:
  datasource:
#    生产库只读
    sexytea-pro-rd:
      jdbc-url: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      username: xxxxxxxxxxxxxxxxxxxxxxxxxxx
      password: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      maximum-pool-size: 10
      minimum-idle: 5
      connection-timeout: 10000
      pool-name: sexytea
      driver-class-name: com.mysql.cj.jdbc.Driver
      data-source-properties:
        connectTimeout: 3000
        socketTimeout: 10000
#   开发测试库
    sexytea-test-all:
      jdbc-url: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      username: xxxxxxxxxxxxxxxxxxxxx
      password: xxxxxxxxxxxxxxxxxxxxxx
      maximum-pool-size: 10
      minimum-idle: 5
      connection-timeout: 10000
      pool-name: sexytea
      driver-class-name: com.mysql.cj.jdbc.Driver
      data-source-properties:
        connectTimeout: 3000
        socketTimeout: 10000

⚡️数据源一:SexyTeaProdSourceonfig


/**
 * 生产只读库数据源配置
 * @author Cocowwy
 * @create 2021-09-09-11:55
 */
@Configuration
@EnableJdbcRepositories(jdbcOperationsRef = "sexyteaProdNamedParameterJdbcOperations",
        basePackages = "com.sexytea.xxxxxx.repository.sexyteapro")
public class SexyTeaProdSourceonfig extends AbstractJdbcConfiguration {

    @Bean("sexyteaProdDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.sexytea-pro-rd")
    public DataSource sexyteaDataSource() {
        return DataSourceBuilder.create()
                .build();
    }

    @Bean("sexyteaProdNamedParameterJdbcOperations")
    public NamedParameterJdbcOperations sexyteaNamedParameterJdbcOperations(@Qualifier("sexyteaProdDataSource") DataSource dataSource) {
        return new NamedParameterJdbcTemplate(dataSource);
    }
    
    @Bean
    public DataAccessStrategy sexyteaProdDataAccessStrategy(@Qualifier("sexyteaProdNamedParameterJdbcOperations") NamedParameterJdbcOperations operations,
                                                     JdbcConverter jdbcConverter, JdbcMappingContext context, Dialect dialect) {
        return new DefaultDataAccessStrategy(new SqlGeneratorSource(context, jdbcConverter, dialect), context,
                jdbcConverter, operations);
    }
}

⚡️数据源二:SexyTeaTestSourceConfig

/**
 * 开发测试库只读配置
 * @author Cocowwy
 * @create 2021-09-09-11:54
 */
@Configuration
@EnableJdbcRepositories(jdbcOperationsRef = "sexyteaTestNamedParameterJdbcOperations",
        basePackages = "com.sexytea.xxxxxx.repository.sexyteatest")
public class SexyTeaTestSourceConfig extends AbstractJdbcConfiguration {

    @Primary
    @Bean("sexyteaTestDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.sexytea-test-all")
    public DataSource sexyteaDataSource() {
        return DataSourceBuilder.create()
                .build();
    }

    @Primary
    @Bean("sexyteaTestNamedParameterJdbcOperations")
    public NamedParameterJdbcOperations sexyteaNamedParameterJdbcOperations(@Qualifier("sexyteaTestDataSource") DataSource dataSource) {
        return new NamedParameterJdbcTemplate(dataSource);
    }
    
    @Bean
    public DataAccessStrategy sexyteaTestDataAccessStrategy(@Qualifier("sexyteaTestNamedParameterJdbcOperations") NamedParameterJdbcOperations operations,
                                                     JdbcConverter jdbcConverter, JdbcMappingContext context, Dialect dialect) {
        return new DefaultDataAccessStrategy(new SqlGeneratorSource(context, jdbcConverter, dialect), context,
                jdbcConverter, operations);
    }
}

⚡️实体类entity

/**
 * @author Cocowwy
 * @create 2021-09-09-14:49
 */

@Data
@Builder
@Table("t_order")
public class Order {
    @Id
    @Column("f_id")
    private Long id;
    
    //......字段忽略~
}

⚡️Repository

package com.sexytea.xxxxxx.repository.sexyteapro;
/**
 * @author Cocowwy
 * @create 2021-09-09-14:47
 */
public interface OrderProdRepository extends CrudRepository<Order, Long> {
	//......
}
package com.sexytea.xxxxxx.repository.sexyteatest;
/**
 * @author Cocowwy
 * @create 2021-09-09-14:50
 */
public interface OrderTestRepository extends CrudRepository<Order, Long> {
	//......
}

⚡️目录结构:
在这里插入图片描述
⚡️保持EnableJdbcRepositoriesbasePackages指定的包名格式一致,即该包下的Repository接口均路由到指定的数据源上面

到此,基于SpringDataJDBC的多数据源已经配置完成💥~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值