配置多数据源 spring boot

Posted flyingtanks

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置多数据源 spring boot相关的知识,希望对你有一定的参考价值。

一、使用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;

//表示这个类为一个配置类
@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();
}
}

以上是关于配置多数据源 spring boot的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Mybatis 多数据源配置

Spring Boot 2.X:MyBatis 多数据源配置

spring boot mongodb 多数据库

关于Spring Boot 多数据源的事务管理

Spring Boot 多数据源 自动切换

配置多数据源 spring boot