springbootjpa整合多数据源(springboot怎么配置多个数据源)

技术SpringBoot+Jpa项目配置双数据源怎么实现这篇文章主要介绍“SpringBoot+Jpa项目配置双数据源怎么实现”,在日常操作中,相信很多人在SpringBoot+Jpa项目配置双数据源怎么实现问题上存在疑

这篇文章主要介绍“SpringBoot Jpa项目配置双数据源怎么实现",在日常操作中,相信很多人在SpringBoot Jpa项目配置双数据源怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“SpringBoot Jpa项目配置双数据源怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

配置yml文件

服务器:

端口:8080

弹簧:

profiles:

active:dev

千斤顶:

时区:GMT 8

#这里是我们的数据库配置地方

数据源:

数据1:#这里是数据库一

驱动程序rclassname : com。MySQL。CJ。JDBC。驾驶员

网址: JDBC :我的SQL ://192。168 .0 .77:3306/test1?字符编码=UTF-8服务器时区=亚洲/上海自动重新连接=true faileoverreadonly=false writebatchestatements=true

用户名:root

密码:123

键入: com。阿里巴巴。德鲁伊。游泳池。德鲁伊数据源

数据2:#这里是数据库二

驱动程序rclassname : com。MySQL。CJ。JDBC。驾驶员

网址: JDBC :我的SQL ://192。168 .0 .88:3306/test2?字符编码=UTF-8服务器时区=亚洲/上海自动重新连接=true faileoverreadonly=false writebatchestatements=true

用户名:root

密码:123

键入: com。阿里巴巴。德鲁伊。游泳池。德鲁伊数据源当然到这里肯定是没有结束的,需要配置一些参数,否则启动会报错

创建数据源配置类

我们创建一个数据源的类,我们就给他取名为数据源图(这个名字自定义),在项目下创建一个包,方便管理

SpringBoot+Jpa项目配置双数据源怎么实现

打包。伊曼。cdn。常见。数据源;

导入组织。弹簧框架。豆子。工厂。注释。限定词;

导入组织。弹簧框架。靴子。自动配置。导入自动配置;

导入组织。弹簧框架。靴子。自动配置。JDBC。数据源属性;

导入组织。弹簧框架。靴子。语境。属性。配置属性;

导入组织。弹簧框架。语境。注释。豆子;

importorg.springfra

mework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

/**
 * @author https://blog.csdn.net/weixin_42782429?spm=1000.2115.3001.5343
 * @date 2021/12/21 11:35
 * <p>
 * description 数据源配置
 */
@Configuration
public class DataSourceConfig {

 # 这里是我们在yml文件配置的位置
    private final static String DB_TEST1 = "spring.datasource.test1";
    private final static String DB_TEST2= "spring.datasource.test1";

 # 这个Bean名字子自定义只要不是重复的Bean名字就行了
    @Bean(name = "test1Properties")
    @Qualifier("test1Properties")
    @Primary
    @ConfigurationProperties(DB_TEST1)
    public DataSourceProperties test1Properties() {
        return new DataSourceProperties();
    }

    @Bean(name = "test1DataSource")
    @Qualifier("test1DataSource")
    @Primary
    @ConfigurationProperties(prefix = DB_TEST1)
    public DataSource test1DataSource() {
        return test1Properties().initializeDataSourceBuilder().build();
    }

    @Bean(name = "test2Properties")
    @Qualifier("test2Properties")
    @ConfigurationProperties(DB_TEST2)
    public DataSourceProperties test2Properties() {
        return new DataSourceProperties();
    }

    @Bean(name = "test2DataSource")
    @Qualifier("test2DataSource")
    @ConfigurationProperties(prefix = DB_ANALYSIS)
    public DataSource test2DataSource() {
        return test2Properties().initializeDataSourceBuilder().build();
    }
}

为每个数据库创建配置类

由于需要用到Mybaitis-plus所以你得先导入Mybaitis-Plus的依赖

<!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
package com.eman.xx.xxx.xx;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.Objects;

/**
 * @author tongJie
 * @date 2021/12/21 11:59
 * <p>
 * description  日志处理端数据库配置
 */
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        // 配置连接工厂
        entityManagerFactoryRef = "tes1Factory",
        // 配置事物管理器
        transactionManagerRef = "tes1Transaction",
        // 设置Jpa 的 repository所在位置
        basePackages = {"com.xx.xx.xx.**.repository"}
)
// 设置扫描的mapper
@MapperScan(basePackages ="xx.xx.xx.test1.**.mapper", sqlSessionTemplateRef  = "tes1SqlSessionTemplate")
public class AnalysisDataBaseConfig {

    @Autowired
    @Qualifier("tes1DataSource")
    private DataSource analysisDataSource;

    @Autowired
    private JpaProperties jpaProperties;

    @Autowired
    private HibernateProperties properties;

    // 以下是jpa的配置

    /**
     * 连接工厂
     * @param builder 创建工具
     * @return 结果
     */
    @Bean(name = "tes1Factory")
    public LocalContainerEntityManagerFactoryBean tes1Factory(EntityManagerFactoryBuilder builder) {
        return builder
                // 设置数据源
                .dataSource(analysisDataSource)
                //设置实体类所在位置.扫描所有带有 @Entity 注解的类
                .packages("xx.xx.xx.tes1.**.entity")
                // Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,
                // Repository就能用它来创建 EntityManager 了,然后 EntityManager 就可以针对数据库执行操作
                .persistenceUnit("tes1")
                // 为了加载yml中jpa下hibernate的相关配置
                .properties(properties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings()))
                .build();

    }

    /**
     * 配置事物管理器
     *
     * @param builder 创建工具
     * @return 结果
     */
    @Bean(name = "tes1Transaction")
    PlatformTransactionManager tes1Transaction(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(Objects.requireNonNull(analysisFactory(builder).getObject()));
    }

    // 以下是mybatis的配置

    /**
     * 配置sqlSessionFactory
     * @return 结果
     * @throws Exception 异常
     */
    @Bean("tes1SqlSessionFactory")
    public SqlSessionFactory tes1SqlSessionFactory() throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(analysisDataSource);
        sqlSessionFactory.setMapperLocations(new 
        //这里填写你mybaits的xml文件存放的路径
        PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*.xml"));
        return sqlSessionFactory.getObject();
    }

    /**
     * 配置sqlSessionTemplate
     * @return 结果
     */
    @Bean(name = "tes1SqlSessionTemplate")
    public SqlSessionTemplate tes1SqlSessionTemplate() throws Exception {
        return new SqlSessionTemplate(tes1SqlSessionFactory());
    }
}

以此类推之后每增加一个数据库源就循环上面的方法
注意!!!!包一定要放对你配置的位置,否则不识别就会报错!!!!!!

到此,关于“SpringBoot+Jpa项目配置双数据源怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/156064.html

(0)

相关推荐

  • css如何设置div的最大高度

    技术css如何设置div的最大高度本篇内容介绍了“css如何设置div的最大高度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

    攻略 2021年11月9日
  • apacheflink多个漏洞分析(apacheflink目录遍历漏洞修复)

    技术Apache Flink 目录遍历漏洞是怎样的本篇文章给大家分享的是有关Apache Flink 目录遍历漏洞是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一

    攻略 2021年12月21日
  • Hibernate会话工厂怎么建立

    技术Hibernate会话工厂怎么建立这篇文章主要讲解了“Hibernate会话工厂怎么建立”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate会话工厂怎么建

    攻略 2021年12月4日
  • 个人面试小总结之一

    技术个人面试小总结之一 个人面试小总结之一基础
    值传递和引用传递的区别
    值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,那么我们的实际参数不会改变
    引用传递:指在调

    礼包 2021年12月5日
  • 图像处理—图像的旋转

    技术图像处理—图像的旋转 图像处理—图像的旋转此处不叙述公式的推导,只是以初学者的角度理顺思路与总结重要知识点。
    图像的旋转公式为
    $$\left\{\begin{array}{c}i^{'}=icos

    礼包 2021年12月24日
  • 笔记本安装windows和linux系统(linux 安装windows 软件)

    技术笔记本Linux版如何安装Windows系统这篇文章将为大家详细讲解有关笔记本Linux版如何安装Windows系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  首先,我们需要

    攻略 2021年12月20日