• springboot配置多数据源


    关于springboot配置多数据源,整理了这篇笔记,分享给有需要的小伙伴们,视频看的动力节点王鹤老师讲的springboot

    视频资源:https://www.bilibili.com/video/BV1XQ4y1m7ex

    一、目录结构
    目录结构

    二、依赖包(pom.xml)


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.boot
    spring-boot-starter-data-jpa


    mysql
    mysql-connector-java


    org.springframework.boot
    spring-boot-configuration-processor
    true


    org.projectlombok
    lombok
    1.18.2

    三、配置文件
    server:
    port: 8080
    spring:
    datasource:
    first:
    driver-class-name: com.mysql.jdbc.Driver
    jdbc-url: jdbc:mysql://localhost:3306/firstuseUnicode=true&characterEncoding=utf8&allowMultiQueries=true
    username: root
    password: root
    second:
    driver-class-name: com.mysql.jdbc.Driver
    jdbc-url: jdbc:mysql://localhost:3306/seconduseUnicode=true&characterEncoding=utf8&allowMultiQueries=true
    username: root
    password: root
    jpa:
    hibernate:
    ddl-auto: update
    naming:
    physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
    implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: mysql

    四、多数据源配置(jpa)
    1. DataSourceConfiguration

    package com.cetc.config;

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;

    import javax.sql.DataSource;

    /**
    * 数据库配置
    */
    @Configuration
    public class DataSourceConfiguration {

    /**
    * 第一个数据连接,默认优先级最高
    * @return
    */
    @Bean(name = “dataSourceFirst”)
    @Primary
    @ConfigurationProperties(prefix = “spring.datasource.first”)
    public DataSource dataSourceFirst() {
    //这种方式的配置默认只满足spring的配置方式,如果使用其他数据连接(druid),需要自己独立获取配置
    return DataSourceBuilder.create().build();
    }

    /**
    * 第二个数据源
    * @return
    */
    @Bean(name = “dataSourceSecond”)
    @ConfigurationProperties(prefix = “spring.datasource.second”)
    public DataSource dataSourceSecond() {
    return DataSourceBuilder.create().build();
    }
    }
    说明:其实这里配置已经完成了,这里就配置了两个数据源了。可以加入对应的JdbcTemplate,这里不做介绍,比较简单

    2. JpaFirstConfiguration

    package com.cetc.config;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    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.context.annotation.Primary;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.orm.jpa.JpaTransactionManager;
    import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
    import org.springframework.transaction.annotation.EnableTransactionManagement;

    import javax.persistence.EntityManager;
    import javax.sql.DataSource;

    /**
    * 第一个数据源,jpa的相关配置
    */
    @Configuration
    @EntityScan(basePackages = “com.cetc.domain.first”)
    //1、实体扫描
    //2、实体管理ref
    //3、事务管理
    @EnableJpaRepositories(
    basePackages = “com.cetc.repository.first”,
    entityManagerFactoryRef = “firstEntityManagerFactoryBean”,
    transactionManagerRef = “firstTransactionManager”)
    @EnableTransactionManagement
    public class JpaFirstConfiguration {

    //第一个数据源,可以不加Qualifier
    @Autowired
    @Qualifier(“dataSourceFirst”)
    private DataSource dataSource;

    //jpa其他参数配置
    @Autowired
    private JpaProperties jpaProperties;

    //实体管理工厂builder
    @Autowired
    private EntityManagerFactoryBuilder factoryBuilder;

    /**
    * 配置第一个实体管理工厂的bean
    * @return
    */
    @Bean(name = “firstEntityManagerFactoryBean”)
    @Primary
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
    return factoryBuilder.dataSource(dataSource)
    //这一行的目的是加入jpa的其他配置参数比如(ddl-auto: update等)
    //当然这个参数配置可以在事务配置的时候也可以
    .properties(jpaProperties.getHibernateProperties(new HibernateSettings()))
    .packages(“com.cetc.domain.first”)
    .persistenceUnit(“firstPersistenceUnit”)
    .build();
    }

    /**
    * EntityManager不过解释,用过jpa的应该都了解
    * @return
    */
    @Bean(name = “firstEntityManager”)
    @Primary
    public EntityManager entityManager() {
    return entityManagerFactoryBean().getObject().createEntityManager();
    }

    /**
    * jpa事务管理
    * @return
    */
    @Bean(name = “firstTransactionManager”)
    @Primary
    public JpaTransactionManager transactionManager() {
    JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
    jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
    return jpaTransactionManager;
    }
    }

    3. JpaSecondConfiguration

    package com.cetc.config;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    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.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.orm.jpa.JpaTransactionManager;
    import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
    import org.springframework.transaction.annotation.EnableTransactionManagement;

    import javax.persistence.EntityManager;
    import javax.sql.DataSource;

    /**
    * 第二个数据源,jpa的相关配置
    */
    @Configuration
    @EntityScan(basePackages = “com.cetc.domain.second”)
    //1、实体扫描
    //2、实体管理ref
    //3、事务管理
    @EnableJpaRepositories(
    basePackages = “com.cetc.repository.second”,
    entityManagerFactoryRef = “secondEntityManagerFactoryBean”,
    transactionManagerRef = “secondTransactionManager”)
    @EnableTransactionManagement
    public class JpaSecondConfiguration {

    //第二个数据源,必须加Qualifier
    @Autowired
    @Qualifier(“dataSourceSecond”)
    private DataSource dataSource;

    //jpa其他参数配置
    @Autowired
    private JpaProperties jpaProperties;

    //实体管理工厂builder
    @Autowired
    private EntityManagerFactoryBuilder factoryBuilder;

    /**
    * 配置第二个实体管理工厂的bean
    * @return
    */
    @Bean(name = “secondEntityManagerFactoryBean”)
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
    return factoryBuilder.dataSource(dataSource)
    .properties(jpaProperties.getHibernateProperties(new HibernateSettings()))
    .packages(“com.cetc.domain.second”)
    .persistenceUnit(“secondPersistenceUnit”)
    .build();
    }

    /**
    * EntityManager不过解释,用过jpa的应该都了解
    * @return
    */
    @Bean(name = “secondEntityManager”)
    public EntityManager entityManager() {
    return entityManagerFactoryBean().getObject().createEntityManager();
    }

    /**
    * jpa事务管理
    * @return
    */
    @Bean(name = “secondTransactionManager”)
    public JpaTransactionManager transactionManager() {
    JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
    jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
    return jpaTransactionManager;
    }
    }
    ————————————————
    版权声明:本文为CSDN博主「牛仔码农@」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/f5465245/article/details/123277463

  • 相关阅读:
    嬴彻科技日: 发布《自动驾驶卡车量产白皮书》分享从量产走向无人技术路线
    安卓有哪些耳机好用?好用的安卓蓝牙耳机推荐
    Django教程
    【软考】11.1 生命周期/CMM/开发模型
    Swifit学习第一天
    AI基础:从线性回归到梯度下降
    Redis配置与优化
    C#中错误与异常处理
    【LangChain学习之旅】—(11) 记忆:通过Memory记住用户上次的对话细节
    2015架构案例(五十一)
  • 原文地址:https://blog.csdn.net/bsegebr/article/details/126596950