博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot之jpa多数据源
阅读量:6300 次
发布时间:2019-06-22

本文共 6247 字,大约阅读时间需要 20 分钟。

  1、随着业务复杂程度的增加,我们在单一数据源上面的使用越来越不满足具体的业务逻辑以及实现了。

  2、那么多数据源,比如多库多数据库等,我们在使用一个工程的时候多数据源的连接还是很有必要的,这里做一下记录

  3、实例配置

  1)目录结构

  

  2)依赖包(pom.xml)

   
org.springframework.boot
spring-boot-starter-parent
2.0.0.RELEASE
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

  3)application.yaml

server:  port: 8080spring:  datasource:    first:      driver-class-name: com.mysql.jdbc.Driver      jdbc-url: jdbc:mysql://localhost:3306/first?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true      username: root      password: root    second:      driver-class-name: com.mysql.jdbc.Driver      jdbc-url: jdbc:mysql://localhost:3306/second?useUnicode=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

  备注:这里参数可以随便配置,但是使用spring原生的要对应名称配置。url必须使用jdbc-url的名称

       jpa的其他参数,主要是在jpaProperties里面。为了在新的数据源上面加上对应的参数配置

  4)多数据源配置(jpa)

  a、DataSourceConfiguration 

/** * 数据库配置 */@Configurationpublic 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,这里不做介绍,比较简单

  b、JpaFirstConfiguration 

/** * 第一个数据源,jpa的相关配置 */@Configuration@EntityScan(basePackages = "com.cetc.domain.first")//1、实体扫描//2、实体管理ref//3、事务管理@EnableJpaRepositories(        basePackages = "com.cetc.repository.first",        entityManagerFactoryRef = "firstEntityManagerFactoryBean",        transactionManagerRef = "firstTransactionManager")@EnableTransactionManagementpublic 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;    }}

  c、JpaSecondConfiguration

/** * 第二个数据源,jpa的相关配置 */@Configuration@EntityScan(basePackages = "com.cetc.domain.second")//1、实体扫描//2、实体管理ref//3、事务管理@EnableJpaRepositories(        basePackages = "com.cetc.repository.second",        entityManagerFactoryRef = "secondEntityManagerFactoryBean",        transactionManagerRef = "secondTransactionManager")@EnableTransactionManagementpublic 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;    }}

  d、测试:

  

  4、源码:

转载于:https://www.cnblogs.com/ll409546297/p/10496346.html

你可能感兴趣的文章
精品软件介绍 Wireless Network Watcher 中文版 - 防蹭网监视软件
查看>>
Ubuntu上snmp安装、配置、启动及远程测试完整过程
查看>>
puppet进阶指南——service资源详解
查看>>
Eclipse中使用的容器超时问题解决方法
查看>>
E1开发(五)信令通道
查看>>
saltstack学习一:安装与升级
查看>>
吐血推荐:VBScript教程及语言参考电子书
查看>>
AIX 5L学习总结2
查看>>
IE8.0 上传图片时,提示无效的图片文件的解决办法!
查看>>
安装SCCM2007
查看>>
菜鸟也玩mysql之学习笔记篇
查看>>
Linux(Centos、Ubuntu)下在本地重置找回root密码
查看>>
Exchange 2010 集线器传输相关知识
查看>>
DVWA系列之21 存储型XSS分析与利用
查看>>
Go基础之--位操作中你所不知道的用法
查看>>
解决zabbix的zabbix_get获取客户端数据爆“standard in must be a tty”
查看>>
Python回顾与整理1:Python基础
查看>>
微软PDC2008西游记(3)我拿到windows7光盘了
查看>>
error LNK2005: _DllMain@12 already defined in MSVCRTD.lib
查看>>
blog推荐 - 软件产品管理之Tyner Blain
查看>>