一、使用jdbc 配置多数据源
1.yml数据源配置
2.配置类
package com.v246.common.config.datasource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.core.JdbcOperations; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; //表示这个类为一个配置类 @Configuration public class DatasourceConfig { // 将这个对象放入Spring容器中 @Bean("datavisualDataSource") // 表示这个数据源是默认数据源 @Primary @Qualifier("datavisualDataSource") // 读取application.properties中的配置参数映射成为一个对象 // prefix表示参数的前缀 @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.datavisual") public DataSource datavisualDataSource(){ return DruidDataSourceBuilder.create().build(); } @Bean("vlmsDataSource") @Qualifier("vlmsDataSource") @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.vlms") public DataSource vlmsDataSource(){ return DruidDataSourceBuilder.create().build(); } @Bean("jdbcTemplate") public JdbcTemplate datavisualJdbcOperations(@Qualifier("datavisualDataSource") DataSource datavisualDataSource) { return new JdbcTemplate(datavisualDataSource); } @Bean("vlmsJdbcTemplate") public JdbcOperations vlmsJdbcOperations(@Qualifier("vlmsDataSource") DataSource vlmsDataSource) { return new JdbcTemplate(vlmsDataSource); } @Bean @Primary public PlatformTransactionManager datavisualTransactionManager(@Qualifier("datavisualDataSource") DataSource datavisualDataSource) { return new DataSourceTransactionManager(datavisualDataSource); } @Bean public PlatformTransactionManager vlmsTransactionManager(@Qualifier("vlmsDataSource") DataSource vlmsDataSource) { return new DataSourceTransactionManager(vlmsDataSource); } @Bean(name = "sqlSessionFactory") // 表示这个数据源是默认数据源 @Primary // @Qualifier表示查找Spring容器中名字为DataSource的对象 public SqlSessionFactory test1SqlSessionFactory(@Qualifier("datavisualDataSource") DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(datasource); bean.setMapperLocations( // 设置mybatis的xml所在位置 new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/mapper/*.xml")); return bean.getObject(); } @Bean(name = "vlmsSqlSessionFactory") // @Qualifier表示查找Spring容器中名字为DataSource的对象 public SqlSessionFactory vlmsSqlSessionFactory(@Qualifier("vlmsDataSource") DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(datasource); bean.setMapperLocations( // 设置mybatis的xml所在位置 new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/test01/*.xml")); return bean.getObject(); } }
3.测试类
public class SqlserverServiceTest { @Resource JdbcTemplate vlmsJdbcTemplate; @Autowired NamedDb db; @Test public void testTime() { Map<String,Object> map = vlmsJdbcTemplate.queryForMap("SELECT * FROM wx_user WHERE user_id='***'"); System.out.println(map); Record rc = db.findFirst("SELECT * FROM SYSC03 WHERE CGRDM='***'"); System.out.println(rc); } }
二、使用mybatis 配置多数据源
1.yml数据源配置
2.prom.xml配置
<!--引入dynamic-datasource-spring-boot-starter。--> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.6</version> </dependency>
3.测试类
// 默认为主数据源 使用@DS("数据源名称")则使用新其他数据源@DS("vlms") public interface BiZcPlanShipmentMapper extends IBaseMapper<BiZcPlanShipment> { Page<Record> getDataList(@Param("filterPage")Page<Record> page); }
第二种mybatis 配置方法可参考 https://mp.baomidou.com/guide/dynamic-datasource.html
package com.v246.common.config.datasource;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.core.JdbcOperations;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;//表示这个类为一个配置类@Configurationpublic class DatasourceConfig { // 将这个对象放入Spring容器中@Bean("datavisualDataSource") // 表示这个数据源是默认数据源@Primary @Qualifier("datavisualDataSource") // 读取application.properties中的配置参数映射成为一个对象 // prefix表示参数的前缀@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.datavisual") public DataSource datavisualDataSource(){ return DruidDataSourceBuilder.create().build();} @Bean("vlmsDataSource") @Qualifier("vlmsDataSource") @ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.vlms") public DataSource vlmsDataSource(){ return DruidDataSourceBuilder.create().build();} @Bean("jdbcTemplate") public JdbcTemplate datavisualJdbcOperations(@Qualifier("datavisualDataSource") DataSource datavisualDataSource) { return new JdbcTemplate(datavisualDataSource);} @Bean("vlmsJdbcTemplate") public JdbcOperations vlmsJdbcOperations(@Qualifier("vlmsDataSource") DataSource vlmsDataSource) { return new JdbcTemplate(vlmsDataSource);} @Bean @Primarypublic PlatformTransactionManager datavisualTransactionManager(@Qualifier("datavisualDataSource") DataSource datavisualDataSource) { return new DataSourceTransactionManager(datavisualDataSource);} @Beanpublic PlatformTransactionManager vlmsTransactionManager(@Qualifier("vlmsDataSource") DataSource vlmsDataSource) { return new DataSourceTransactionManager(vlmsDataSource);} @Bean(name = "sqlSessionFactory") // 表示这个数据源是默认数据源@Primary// @Qualifier表示查找Spring容器中名字为DataSource的对象public SqlSessionFactory test1SqlSessionFactory(@Qualifier("datavisualDataSource") DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(datasource);bean.setMapperLocations( // 设置mybatis的xml所在位置new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/mapper/*.xml")); return bean.getObject();} @Bean(name = "vlmsSqlSessionFactory") // @Qualifier表示查找Spring容器中名字为DataSource的对象public SqlSessionFactory vlmsSqlSessionFactory(@Qualifier("vlmsDataSource") DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(datasource);bean.setMapperLocations( // 设置mybatis的xml所在位置new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/test01/*.xml")); return bean.getObject();}}