spring全家桶使用学习-多数据源(多主)配置
对于一些项目中可能存在需要配置多个主数据源,并非HA模式
当存在多主数据源时,就不能使用 spring-boot-jdbc-starter 自动装配,而需要自行管理相关bean;
1:排除spring-boot datasource相关自动配置类
通过SpringBootApplication注解中的exclude 方法可以排除多个类 ;
对于当前情况,需要排除
- DataSource自动配置 :org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- TransactionManager 自动配置: org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
- JDBCTemplate 自动配置:org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
2:排除了springboot自动装配后,手动配置dataSource相关bean
/* * Copyright (c) 2020, guoxing, Co,. Ltd. All Rights Reserved */ package com.xingguo.multi.datasource.config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; /** * MultiDataSourceConfig * 自定义多数据源 * * @author guoxing * @date 2020/12/14 3:53 PM * @since */ @Configuration public class MultiDataSourceConfig { /** * 自定义声明 foo.datasource 配置相关 * {@link ConfigurationProperties}注解使用支持解析properties文件中指定前缀的key * * @return */ @Bean("fooDataSourceProperties") @ConfigurationProperties("foo.datasource") public DataSourceProperties fooDataSourceProperties() { return new DataSourceProperties(); } /** * 自定义声明 foo datasource * * @param dataSourceProperties * @return */ @Bean("fooDataSource") public DataSource fooDataSource(@Qualifier("fooDataSourceProperties") DataSourceProperties dataSourceProperties) { System.out.printf("当前fooDataSourceUrl为:%s\n", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSourceBuilder().build(); } /** * 自定义 foo 相关事务管理器 */ @Bean("fooTransactionManager") public PlatformTransactionManager fooTransactionManager(@Qualifier("fooDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 自定义声明 bar.datasource 配置相关 * * @return */ @Bean("barDataSourceProperties") @ConfigurationProperties("bar.datasource") public DataSourceProperties barDataSourceProperties() { return new DataSourceProperties(); } /** * 自定义声明 bar datasource * * @param dataSourceProperties * @return */ @Bean("barDataSource") public DataSource barDataSource(@Qualifier("barDataSourceProperties") DataSourceProperties dataSourceProperties) { System.out.printf("当前barDataSourceUrl为:%s\n", dataSourceProperties.getUrl()); return dataSourceProperties.initializeDataSourceBuilder().build(); } /** * 自定义 bar 相关事务管理器 */ @Bean("barTransactionManager") public PlatformTransactionManager barTransactionManager(@Qualifier("barDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
详细源码地址:https://github.com/mengyan183/spring-family/tree/main/spring-multi-datasource

浙公网安备 33010602011771号