首页 > 编程语言 > 详细

springBoot 双数据源

时间:2019-12-23 12:12:57      阅读:81      评论:0      收藏:0      [点我收藏+]

1.在pom.xml中引入

<!-- mybatis基于springboot支持 -->
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.1.1</version>
</dependency>

<!--数据库连接池druid基于springboot支持-->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.1.21</version>
</dependency>
注:这里引入的jar包要支持springBoot

2.在配置文件中填写数据源信息

datasource:
  first:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/studer
    username: root
    password: root
  second:
     type: com.alibaba.druid.pool.DruidDataSource
     url: jdbc:mysql://localhost:3306/duibiao
     username: root
     password: root

3.创建需要的各层级目录

   技术分享图片

 

 4.config包下创建FirstDataSourceConfig.java文件

/**
 * @description:
 * @author: daqiufeng
 * @date: 2019-12-20 10:17
 */
@Configuration //将类注册到springboot容器中
@MapperScan(basePackages = "com.example.demo.mapper.firstMapper",sqlSessionFactoryRef = "firstSqlSessionFactory")
public class FirstDataSourceConfig {
    //mapper.xml 路径
    static String mapperLocation="classpath:mybatis/first/*/*/*.xml";
    //mybatisConfig 路径
    static String mybatisConfig = "classpath:mybatis/first/mybatis-config.xml";
    //entity路径
    static String pojo = "com.example.demo.entity";

    /**
     *
     * @return
     */
    @Bean(name ="firstDatasource") //注入到的容器
    @ConfigurationProperties(prefix = "datasource.first") //获取配置文件信息
    @Primary //设置为优先,多个数据源必须指定一个
    public DataSource firstDatasource(){
        return DruidDataSourceBuilder.create().build();
    }


    //创建第一数据源事务
    @Primary
    @Bean(name="firstTranscation")
    public DataSourceTransactionManager firstTranscation(){
        return  new DataSourceTransactionManager(firstDatasource());
    }

    //创建第一数据源Mybatis的连接会话工厂
    @Primary
    @Bean(name="firstSqlSessionFactory")
    public SqlSessionFactory firstSqlSessionFactoryRef(@Qualifier("firstDatasource")DataSource firstDatasource) throws Exception {
       /* //mybatis 配置信息
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        //开启驼峰
        configuration.setMapUnderscoreToCamelCase(true);*/

        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(firstDatasource);
        //指定Mapper.xml路径
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocation));
        //指定 mybatis 配置文件
        sessionFactoryBean.setConfigLocation(new DefaultResourceLoader().getResource(mybatisConfig));
        //指定 实体类 的路径
        sessionFactoryBean.setTypeAliasesPackage(pojo);
        return sessionFactoryBean.getObject();
    }

}

第一数据源配置完成,能够正常启动

5.在config包下创建SecoundDataSourceConfig.java文件

/**
 * @description:
 * @author: daqiufeng
 * @date: 2019-12-23 9:01
 */
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper.secondMapper",sqlSessionFactoryRef = "secoundSqlSessionFactory")
public class SecoundDataSourceConfig {
     static String MapperLocation = "classpath:mybatis/secound/*/*/*.xml";
     static String mybatisConfig="classpath:mybatis/secound/mybatis-config.xml";
     static String pojo = "com.example.demo.entity";

    /**
     * 创建数据源 指定数据源配置信息
     * @return
     */
    @Bean(name="secoundDataSource")
    @ConfigurationProperties(prefix = "datasource.second")
    public DataSource secoundDataSource(){
        return DruidDataSourceBuilder.create().build();
    }

    /**
     * 创建该数据源事务
     */
    @Bean(name="secoundTranscation")
    public DataSourceTransactionManager transactionManager(){
        return new DataSourceTransactionManager(secoundDataSource());
    }

    /**
     * 创建mybatis会话工厂
     */
    @Bean(name="secoundSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("secoundDataSource")DataSource secoundDataSource) throws Exception {
        //创建工厂实例
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        //放入数据源
        sessionFactoryBean.setDataSource(secoundDataSource);
        //指定Mapper.xml路径
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MapperLocation));
        //指定mybatis-config.xml路径
        sessionFactoryBean.setConfigLocation(new DefaultResourceLoader().getResource(mybatisConfig));
        //指定实体类路径
        sessionFactoryBean.setTypeAliasesPackage(pojo);
        return sessionFactoryBean.getObject();
    }
}

6.配置完数据源启动出现错误

1>

    技术分享图片

 

 

技术分享图片

创建会话工厂是未指定bean的name

 

2>多数据源使用事务

需要使用指定的事务 @Transactional(transactionManager = "")

 

 

 

 

 

springBoot 双数据源

原文:https://www.cnblogs.com/xxjh/p/12082739.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!