Spring Boot 2.0多数据源配置方法实例详解

两个数据库实例,一个负责读,一个负责写。

datasource-reader:
  type: com.alibaba.druid.pool.DruidDataSource
  url: jdbc:mysql://192.168.43.61:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
  username: icbc
  password: icbc
  driver-class-name: com.mysql.jdbc.Driver
  continue-on-error: false
  sql-script-encoding: UTF-8

datasource-writer:
  type: com.alibaba.druid.pool.DruidDataSource
  url: jdbc:mysql://192.168.43.61:3306/hdfs?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
  username: icbc
  password: icbc
  driver-class-name: com.mysql.jdbc.Driver
  continue-on-error: false
  sql-script-encoding: UTF-8

读数据库配置

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryPrimary", transactionManagerRef = "transactionManagerPrimary", basePackages = {
    "cn.cib.repository.read"})
public class RepositoryPrimaryConfig {
  @Autowired
  @Qualifier("r_ds")
  private DataSource r_ds;
  @Bean(destroyMethod = "", name = "entityManagerPrimary")
  @Primary
  public EntityManager entityManager() {
    return entityManagerFactoryPrimary().getObject().createEntityManager();
  }
  @Bean(destroyMethod = "", name = "entityManagerFactoryPrimary")
  @Primary
  public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary() {
    HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
    factoryBean.setDataSource(r_ds);
    factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
    factoryBean.setJpaProperties(HibernatePropertiesBuilder.hibernateProperties());
    factoryBean.setPackagesToScan("cn.cib.repository.read", "cn.cib.entity.read");
    factoryBean.setPersistenceUnitName("read");
    return factoryBean;
  }
  @Bean(destroyMethod = "", name = "transactionManagerPrimary")
  @Primary
  PlatformTransactionManager transactionManagerPrimary() {
    return new JpaTransactionManager(entityManagerFactoryPrimary().getObject());
  }
}

写数据库配置

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactorySecondary", transactionManagerRef = "transactionManagerSecondary", basePackages = {
    "cn.cib.repository.write"})
public class RepositorySecondaryConfig {
  @Autowired
  @Qualifier("w_ds")
  private DataSource w_ds;
  @Bean(destroyMethod = "", name = "entityManagerSecondary")
  public EntityManager entityManager() {
    return entityManagerFactorySecondary().getObject().createEntityManager();
  }
  @Bean(destroyMethod = "", name = "entityManagerFactorySecondary")
  public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary() {
    HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
    factoryBean.setDataSource(w_ds);
    factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
    factoryBean.setJpaProperties(HibernatePropertiesBuilder.hibernateProperties());
    factoryBean.setPackagesToScan("cn.cib.repository.write","cn.cib.entity.write");
    factoryBean.setPersistenceUnitName("write");
    return factoryBean;
  }
  @Bean(destroyMethod = "", name = "transactionManagerSecondary")
  PlatformTransactionManager transactionManagerSecondary() {
    return new JpaTransactionManager(entityManagerFactorySecondary().getObject());
  }
}

Hibernate相关属性配置

public class HibernatePropertiesBuilder {
  public static Properties hibernateProperties() {
    final Properties hibernateProperties = new Properties();
    hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    hibernateProperties.setProperty("hibernate.hbm2ddl.auto", "update");
    hibernateProperties.setProperty("hibernate.show_sql", "true");
    hibernateProperties.setProperty("hibernate.format_sql", "true");
    return hibernateProperties;
  }
}

总结

以上所述是小编给大家介绍的Spring Boot 2.0多数据源配置方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • springboot v2.0.3版本多数据源配置方法

    本篇分享的是springboot多数据源配置,在从springboot v1.5版本升级到v2.0.3时,发现之前写的多数据源的方式不可用了,捕获错误信息如: 异常:jdbcUrl is required with driverClassName. 先来说下之前的多数据源配置如: spring: datasource: url: jdbc:sqlserver://192.168.122.111;DatabaseName=flight username: sa password: 1234.abc

  • Spring配置多数据源切换

    多数据源切换 db.properties #MySQL jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?autoReconnect=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=admin #定义初始连接数 initialSize=0 #定义最大连接数 maxActive=1000 #定义最大空闲 maxIdle=2

  • Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议

    一.项目需求 在开发过程中,由于技术的不断迭代,为了提高开发效率,需要对原有项目的架构做出相应的调整. 二.存在的问题 为了不影响项目进度,架构调整初期只是把项目做了简单的maven管理,引入springboot并未做spring cloud微服务处理.但随着项目的进一步开发,急需拆分现有业务,做微服务处理.因此架构上的短板日益突出.spring cloud config 无法完全应用,每次项目部署需要修改大量配置文件.严重影响开发效率,因此便萌生了对项目架构再次调整的决心. 三.调整建议 为了

  • 通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中也描述了):只适用于数据库数量不多且固定的情况.针对数据库动态增加的情况无能为力. 下面讲的方案能支持数据库动态增删,数量不限. 数据库环境准备 下面一Mysql为例,先在本地建3个数据库用于测试.需要说明的是本方案不限数据库数量,支持不同的数据库部署在不同的服务器上.如图所示db_project_001.d

  • Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法

    前言 本文主要介绍的是关于Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法,分享出来供大家参考学习,下面来看看详细的介绍: 实现方法: 数据源在配置文件中的配置 <pre name="code" class="java"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring

  • SpringBoot使用Druid数据源的配置方法

    Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池) 一.依赖 为了测试,使用jdbcTemplate <!-- jdbcTemplate --> <dependency> <groupId>org.springframework.boot</groupId> <artifa

  • Spring Boot + Mybatis多数据源和动态数据源配置方法

    网上的文章基本上都是只有多数据源或只有动态数据源,而最近的项目需要同时使用两种方式,记录一下配置方法供大家参考. 应用场景 项目需要同时连接两个不同的数据库A, B,并且它们都为主从架构,一台写库,多台读库. 多数据源 首先要将spring boot自带的DataSourceAutoConfiguration禁掉,因为它会读取application.properties文件的spring.datasource.*属性并自动配置单数据源.在@SpringBootApplication注解中添加ex

  • Spring中配置数据源的几种方式

    无论使用什么形式的Spring DAO支持类,都需要配置数据源的引用.Spring提供了多个选项,用于在Spring程序里配置数据库,其中包括: 1,由JDBC驱动程序定义的数据源. 2,由JNDI查询的数据源. 3,连接池的数据源. 在Spring里,我们可以像使用其他Bean一样来配置一个数据源的引用,并且把它装配到其他的类里. 在配置数据源的时候,其实就是配置一个<bean>节点,指定bean的id,指定bean的class,然后,指定bean的属性,比较通用的属性一般会包括driver

  • spring+Jpa多数据源配置的方法示例

    今天临下班时遇到了一个需求,我的管理平台需要从不同的数据库中获取数据信息,这就需要进行Spring的多数据源配置,对于这种配置,第一次永远都是痛苦的,不过经历了这次的折磨,今后肯定会对这种配置印象深刻.我们这里简单回顾一下流程. 我们配置了两个数据库,一个是公司的数据库,另一个是我本地的一个数据库.首先是application.yml的配置(其中对于公司的数据库我们采取了假的地址,而本机的数据库是真是存在对应的表和库的) 数据库信息: 数据表信息: 1.application.yml datas

  • spring 整合 mybatis 中数据源的几种配置方式(总结篇)

    因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapper.MapperScannerConfigurer 其实逆向工程也是这种方式 1.数据源配配置文件 2.DAO文件 package com.jdd.mapper; import com.jdd.pojo.Employee; import java.util.List; public interfa

随机推荐