Spring Boot多数据源配置(一)durid、mysql、jpa整合
目前在做一个统计项目。需要多数据源整合,其中包括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));
}
}
注意:LocalContainerEntityManagerFactoryBean和userEntityManagerFactory方法其中一个注解@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整合的更多相关文章
- Spring Boot多数据源配置(二)MongoDB
在Spring Boot多数据源配置(一)durid.mysql.jpa 整合中已经讲过了Spring Boot如何配置mysql多数据源.本篇文章讲一下Spring Boot如何配置mongoDB多 ...
- spring boot多数据源配置(mysql,redis,mongodb)实战
使用Spring Boot Starter提升效率 虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfi ...
- spring boot(12)-数据源配置原理
本篇讲的不仅是数据源配置,这也是spring boot实现自动配置的一部分.要理解数据源的配置原理,首先要理解第十篇tomcat连接池的配置 数据源配置源码 这里截取org.springframewo ...
- 三、Spring Boot 多数据源配置
下面一个Java类是已经写好的根据配置文件动态创建多dataSource的代码,其原理也很简单,就是读取配置文件,根据配置文件中配置的数据源数量,动态创建dataSource并注册到Spring中. ...
- Spring Boot Druid数据源配置
package com.hgvip.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.su ...
- 21. Spring Boot Druid 数据源配置解析
1.数据源配置属性类源码 package org.springframework.boot.autoconfigure.jdbc; @ConfigurationProperties( prefix = ...
- spring boot 多数据源配置与使用
在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文 ...
- Spring Boot多数据源配置与使用
在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文件中配置连接参数即可.但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库 ...
- Spring Boot (14) 数据源配置原理
数据源配置源码 这里截取org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration的部分源码,主要介绍Tomcat和Hika ...
随机推荐
- RHEL/CentOS 6.x使用EPEL6与remi的yum源安装MySQL 5.5.x
PS:如果既想获得 RHEL 的高质量.高性能.高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 FedoraProject 推出的 EPEL(Extra Packages for Ent ...
- caffe RandomHue和RandomSaturation
https://www.cnblogs.com/wangyblzu/p/5710715.html HSV和RGB一样是一种图像的颜色模型,h表示色调,s表示饱和度 1.RandomHue void R ...
- 运行时库例程-acc_get_num_devices
格式C 或 C++: int acc_get_num_devices( acc_device_t ); 描述例程 acc_get_num_devices 返回主机上指定类型的加速器设备数量.输入参数说 ...
- 第一个C#程序Hello World
一.编写第一个C#程序——Hello World1. 启动Microsoft Visual Studio 2010.2. 点击“文件”菜单,选择“新建”项,在弹出的子菜单中选择“项目”命令.3. 弹出 ...
- C#获取包括一二级汉字的拼音 首字母
C#获取包括一二级汉字的拼音 首字母 声母 汉字拼音转换 using System; using System.Collections.Generic; using System.Linq; usin ...
- UOJ#179. 线性规划(线性规划)
描述 提交 自定义测试 这是一道模板题. (这个题现在标程挂了..哪位哥哥愿意提供一下靠谱的标程呀?) 本题中你需要求解一个标准型线性规划: 有 nn 个实数变量 x1,x2,…,xnx1,x2,…, ...
- Java反射+注解案例
注解类代码,注解的属性可以有多个: package reflect; import java.lang.annotation.Retention; import java.lang.annotatio ...
- ofbiz最新版13.07.01环境搭建、安装(linux环境下)
一.软件必备: 1.jdk1.7 2.mysql5.6 3.安装tomcat 二.安装: 1.安装 JDK1.7 2.安装mysql数据库 3.下载apache-ofbiz-13.07.01.zip ...
- js | javascript实现浏览器窗口大小被改变时触发事件的方法
转载 当浏览器的窗口大小被改变时触发的事件window.onresize 为事件指定代码: 代码如下: window.onresize = function(){ } 例如: 浏览器可见区域信息: 代 ...
- mount加载虚拟机增强工具步骤
1.创建一个挂载目录sudo mkdir /mnt/cdrom 2.在C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso中添加该文件 3 ...