当前位置: 首页 > 编程笔记 >

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

东门晓博
2023-03-14
本文向大家介绍Spring Boot 2.0多数据源配置方法实例详解,包括了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多数据源配置方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍spring+Jpa多数据源配置的方法示例,包括了spring+Jpa多数据源配置的方法示例的使用技巧和注意事项,需要的朋友参考一下 今天临下班时遇到了一个需求,我的管理平台需要从不同的数据库中获取数据信息,这就需要进行Spring的多数据源配置,对于这种配置,第一次永远都是痛苦的,不过经历了这次的折磨,今后肯定会对这种配置印象深刻。我们这里简单回顾一下流程。 我们配置了两个数据库,

  • 本文向大家介绍springboot 配置DRUID数据源的方法实例分析,包括了springboot 配置DRUID数据源的方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了springboot 配置DRUID数据源的方法。分享给大家供大家参考,具体如下: druid 是阿里开源的数据库连接池。 开发时整合 druid 数据源过程。 1.修改pom.xml 增加上面的配置。 2.编

  • 本文向大家介绍springboot + mybatis配置多数据源示例,包括了springboot + mybatis配置多数据源示例的使用技巧和注意事项,需要的朋友参考一下 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。 代码结构: 简要原理: 1)DatabaseType列出所有的数据源的key---key 2)DatabaseContextHolder是一个线

  • 本文向大家介绍springboot v2.0.3版本多数据源配置方法,包括了springboot v2.0.3版本多数据源配置方法的使用技巧和注意事项,需要的朋友参考一下 本篇分享的是springboot多数据源配置,在从springboot v1.5版本升级到v2.0.3时,发现之前写的多数据源的方式不可用了,捕获错误信息如: 异常:jdbcUrl is required with driver

  • 本文向大家介绍详解MyBatis多数据源配置(读写分离),包括了详解MyBatis多数据源配置(读写分离)的使用技巧和注意事项,需要的朋友参考一下 MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦。 实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用。 多数据源的可能情况 1.主从 通常是MySQL一主多从的情况,本文的例子

  • 本文向大家介绍linux下配置yum源方法详解,包括了linux下配置yum源方法详解的使用技巧和注意事项,需要的朋友参考一下 本人使用的方法一,成功配置,方法二没测过,可以作为参考 方法一: 1.确保RHEL5中已经安装了yum 2.修改源配置文件 #vim /etc/yum.repos.d/CentOS-Base.repo (如果目录下没有.repo文件自己创建一个) 3. 导入key 4.