目前在做一个统计项目。需要多数据源整合,其中包括mysql和mongo。本节先讲mysql、durid、jpa与spring-boot的整合。

引入Durid包

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>

配置文件

spring:
#mysql配置
datasource:
user:
url: jdbc:mysql://192.168.1.252/kxlist_user?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
product:
url: jdbc:mysql://192.168.1.252/kxlist_product?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#jpa配置
jpa:
database: mysql
database-platform: org.hibernate.dialect.MySQL5Dialect
show-sql: true
hibernate:
ddl-auto: update

JAVA文件

  • 总的配置:

    通过@Primary表示主数据源。
@Configuration
public class DruidDataSourceConfig {
@Bean(name="userDataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.user")
public DataSource primaryDataSource() {
System.out.println("-------------------- userDataSource init ---------------------");
return new DruidDataSource();
} @Bean(name="productDataSource")
@ConfigurationProperties(prefix="spring.datasource.product")
public DataSource secondaryDataSource() {
System.out.println("-------------------- productDataSource init ---------------------");
return new DruidDataSource();
}
}
  • user数据源的配置:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="userEntityManagerFactory",
transactionManagerRef="userTransactionManager",
basePackages= { "com.kxlist.statistics.domain.user" }) //设置Repository所在位置
public class UserDataSourceConfig { @Autowired
private JpaProperties jpaProperties; @Autowired
@Qualifier("userDataSource")
private DataSource userDataSource;
/**
* 我们通过LocalContainerEntityManagerFactoryBean来获取EntityManagerFactory实例
* @return
*/
@Bean(name = "userEntityManagerFactoryBean")
//@Primary
public LocalContainerEntityManagerFactoryBean userEntityManagerFactoryBean(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(userDataSource)
.properties(getVendorProperties(userDataSource))
.packages("com.kxlist.statistics.domain.user") //设置实体类所在位置
.persistenceUnit("userPersistenceUnit")
.build();
//.getObject();//不要在这里直接获取EntityManagerFactory
} private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
/**
* EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory
* 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session,
* mybatis的sqlSession.
* @param builder
* @return
*/
@Bean(name = "userEntityManagerFactory")
@Primary
public EntityManagerFactory userEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return this.userEntityManagerFactoryBean(builder).getObject();
} /**
* 配置事物管理器
* @return
*/
@Bean(name = "userTransactionManager")
@Primary
public PlatformTransactionManager writeTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(userEntityManagerFactory(builder));
}
}

注意:LocalContainerEntityManagerFactoryBeanuserEntityManagerFactory方法其中一个注解@Primary即可,不然启动会报错。

  • product数据源的配置
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="productEntityManagerFactory",
transactionManagerRef="productTransactionManager",
basePackages= { "com.kxlist.statistics.domain.product" }) //设置Repository所在位置
public class ProductDataSourceConfig { @Autowired
private JpaProperties jpaProperties; @Autowired
@Qualifier("productDataSource")
private DataSource productDataSource;
/**
* 我们通过LocalContainerEntityManagerFactoryBean来获取EntityManagerFactory实例
* @return
*/
@Bean(name = "productEntityManagerFactoryBean")
public LocalContainerEntityManagerFactoryBean productEntityManagerFactoryBean(EntityManagerFactoryBuilder builder) {
return builder
.dataSource(productDataSource)
.properties(getVendorProperties(productDataSource))
.packages("com.kxlist.statistics.domain.product") //设置实体类所在位置
.persistenceUnit("productPersistenceUnit")
.build();
//.getObject();//不要在这里直接获取EntityManagerFactory
} private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
/**
* EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory
* 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session,
* mybatis的sqlSession.
* @param builder
* @return
*/
@Bean(name = "productEntityManagerFactory")
public EntityManagerFactory productEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return this.productEntityManagerFactoryBean(builder).getObject();
} /**
* 配置事物管理器
* @return
*/
@Bean(name = "productTransactionManager")
public PlatformTransactionManager writeTransactionManager(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(productEntityManagerFactory(builder));
}
}

依照代码在相对应的包下建实体类和Repository即可。

至此,spring-boot与mysql多数据源的整合已经结束。

参考文章

https://my.oschina.net/lengchuan/blog/882391

首发地址

http://www.devzxd.top/2017/06/06/springboot-datasource-mysql.html

Spring Boot多数据源配置(一)durid、mysql、jpa整合的更多相关文章

  1. Spring Boot多数据源配置(二)MongoDB

    在Spring Boot多数据源配置(一)durid.mysql.jpa 整合中已经讲过了Spring Boot如何配置mysql多数据源.本篇文章讲一下Spring Boot如何配置mongoDB多 ...

  2. spring boot多数据源配置(mysql,redis,mongodb)实战

    使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...

  3. spring boot(12)-数据源配置原理

    本篇讲的不仅是数据源配置,这也是spring boot实现自动配置的一部分.要理解数据源的配置原理,首先要理解第十篇tomcat连接池的配置 数据源配置源码 这里截取org.springframewo ...

  4. 三、Spring Boot 多数据源配置

    下面一个Java类是已经写好的根据配置文件动态创建多dataSource的代码,其原理也很简单,就是读取配置文件,根据配置文件中配置的数据源数量,动态创建dataSource并注册到Spring中. ...

  5. Spring Boot Druid数据源配置

    package com.hgvip.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.su ...

  6. 21. Spring Boot Druid 数据源配置解析

    1.数据源配置属性类源码 package org.springframework.boot.autoconfigure.jdbc; @ConfigurationProperties( prefix = ...

  7. spring boot 多数据源配置与使用

    在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文 ...

  8. Spring Boot多数据源配置与使用

    在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文件中配置连接参数即可.但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库 ...

  9. Spring Boot (14) 数据源配置原理

    数据源配置源码 这里截取org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration的部分源码,主要介绍Tomcat和Hika ...

随机推荐

  1. ACM Arabella Collegiate Programming Contest 2015 H. Capital City 边连通分量

    题目链接:http://codeforces.com/gym/100676/attachments 题意: 有 n 个点,m 条边,图中,边强连通分量之间可以直达,即距离为 0 ,找一个点当做首都,其 ...

  2. cutil.h问题

    CUDA5.0没有cutil.h头文件,貌似用helper_cuda.h文件代替,暂时没出问题.

  3. Http之基础

    简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基于TCP/I ...

  4. 前端JavaScript之DOM事件操作

    DOM:文档对象模型,操作网页上的元素的API.比如让盒子移动.变色.轮播图等. 1.DOM(Document Object Moduel):文档对象模型 定义了访问和操作HTML文档的标准法,把HT ...

  5. 当Java遇见了Html--Jsp九大内置对象篇

    jsp内置对象对象是web容器创建的一组对象,不使用new关键词久可以使用的内置对象. 九大内置对象包括以下: out --JspWriter request --ServletRequest rep ...

  6. 深入浅出:promise的各种用法

    https://mp.weixin.qq.com/s?__biz=MzAwNTAzMjcxNg==&mid=2651425195&idx=1&sn=eed6bea35323c7 ...

  7. MyEclipse的快捷键大全(超级实用,方便)

    常用快捷键 1. [ALT+/] 能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ALT+/]快捷键带来的好处吧. 2. [Ctrl+O]  显示类 ...

  8. JS - CommonJS、AMD、CMD

    CommonJS CommonJS是一种JS模块定义规范,它出现之初是为了解决JS天生没有模块管理的缺陷,它的终极目标是提供一个类似Python.Ruby和Java标准库.NodeJS的模块系统就是参 ...

  9. LeetCode207 课程表

    问题:课程表 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定 ...

  10. Oracle常用傻瓜问题1000问

    Oracle常用傻瓜问题1000问 大家在应用ORACLE的时候可能会遇到很多看起来不难的问题, 特别对新手来说, 今天我简单把它总结一下, 发布给大家, 希望对大家有帮助! 和大家一起探讨, 共同进 ...