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

引入Durid包

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid</artifactId>
  4. <version>1.0.29</version>
  5. </dependency>

配置文件

  1. spring:
  2. #mysql配置
  3. datasource:
  4. user:
  5. url: jdbc:mysql://192.168.1.252/kxlist_user?characterEncoding=utf-8&useSSL=false
  6. username: root
  7. password: 123456
  8. driver-class-name: com.mysql.jdbc.Driver
  9. product:
  10. url: jdbc:mysql://192.168.1.252/kxlist_product?characterEncoding=utf-8&useSSL=false
  11. username: root
  12. password: 123456
  13. driver-class-name: com.mysql.jdbc.Driver
  14. #jpa配置
  15. jpa:
  16. database: mysql
  17. database-platform: org.hibernate.dialect.MySQL5Dialect
  18. show-sql: true
  19. hibernate:
  20. ddl-auto: update

JAVA文件

  • 总的配置:

    通过@Primary表示主数据源。
  1. @Configuration
  2. public class DruidDataSourceConfig {
  3. @Bean(name="userDataSource")
  4. @Primary
  5. @ConfigurationProperties(prefix="spring.datasource.user")
  6. public DataSource primaryDataSource() {
  7. System.out.println("-------------------- userDataSource init ---------------------");
  8. return new DruidDataSource();
  9. }
  10. @Bean(name="productDataSource")
  11. @ConfigurationProperties(prefix="spring.datasource.product")
  12. public DataSource secondaryDataSource() {
  13. System.out.println("-------------------- productDataSource init ---------------------");
  14. return new DruidDataSource();
  15. }
  16. }
  • user数据源的配置:
  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(
  4. entityManagerFactoryRef="userEntityManagerFactory",
  5. transactionManagerRef="userTransactionManager",
  6. basePackages= { "com.kxlist.statistics.domain.user" }) //设置Repository所在位置
  7. public class UserDataSourceConfig {
  8. @Autowired
  9. private JpaProperties jpaProperties;
  10. @Autowired
  11. @Qualifier("userDataSource")
  12. private DataSource userDataSource;
  13. /**
  14. * 我们通过LocalContainerEntityManagerFactoryBean来获取EntityManagerFactory实例
  15. * @return
  16. */
  17. @Bean(name = "userEntityManagerFactoryBean")
  18. //@Primary
  19. public LocalContainerEntityManagerFactoryBean userEntityManagerFactoryBean(EntityManagerFactoryBuilder builder) {
  20. return builder
  21. .dataSource(userDataSource)
  22. .properties(getVendorProperties(userDataSource))
  23. .packages("com.kxlist.statistics.domain.user") //设置实体类所在位置
  24. .persistenceUnit("userPersistenceUnit")
  25. .build();
  26. //.getObject();//不要在这里直接获取EntityManagerFactory
  27. }
  28. private Map<String, String> getVendorProperties(DataSource dataSource) {
  29. return jpaProperties.getHibernateProperties(dataSource);
  30. }
  31. /**
  32. * EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory
  33. * 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session,
  34. * mybatis的sqlSession.
  35. * @param builder
  36. * @return
  37. */
  38. @Bean(name = "userEntityManagerFactory")
  39. @Primary
  40. public EntityManagerFactory userEntityManagerFactory(EntityManagerFactoryBuilder builder) {
  41. return this.userEntityManagerFactoryBean(builder).getObject();
  42. }
  43. /**
  44. * 配置事物管理器
  45. * @return
  46. */
  47. @Bean(name = "userTransactionManager")
  48. @Primary
  49. public PlatformTransactionManager writeTransactionManager(EntityManagerFactoryBuilder builder) {
  50. return new JpaTransactionManager(userEntityManagerFactory(builder));
  51. }
  52. }

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

  • product数据源的配置
  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(
  4. entityManagerFactoryRef="productEntityManagerFactory",
  5. transactionManagerRef="productTransactionManager",
  6. basePackages= { "com.kxlist.statistics.domain.product" }) //设置Repository所在位置
  7. public class ProductDataSourceConfig {
  8. @Autowired
  9. private JpaProperties jpaProperties;
  10. @Autowired
  11. @Qualifier("productDataSource")
  12. private DataSource productDataSource;
  13. /**
  14. * 我们通过LocalContainerEntityManagerFactoryBean来获取EntityManagerFactory实例
  15. * @return
  16. */
  17. @Bean(name = "productEntityManagerFactoryBean")
  18. public LocalContainerEntityManagerFactoryBean productEntityManagerFactoryBean(EntityManagerFactoryBuilder builder) {
  19. return builder
  20. .dataSource(productDataSource)
  21. .properties(getVendorProperties(productDataSource))
  22. .packages("com.kxlist.statistics.domain.product") //设置实体类所在位置
  23. .persistenceUnit("productPersistenceUnit")
  24. .build();
  25. //.getObject();//不要在这里直接获取EntityManagerFactory
  26. }
  27. private Map<String, String> getVendorProperties(DataSource dataSource) {
  28. return jpaProperties.getHibernateProperties(dataSource);
  29. }
  30. /**
  31. * EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory
  32. * 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session,
  33. * mybatis的sqlSession.
  34. * @param builder
  35. * @return
  36. */
  37. @Bean(name = "productEntityManagerFactory")
  38. public EntityManagerFactory productEntityManagerFactory(EntityManagerFactoryBuilder builder) {
  39. return this.productEntityManagerFactoryBean(builder).getObject();
  40. }
  41. /**
  42. * 配置事物管理器
  43. * @return
  44. */
  45. @Bean(name = "productTransactionManager")
  46. public PlatformTransactionManager writeTransactionManager(EntityManagerFactoryBuilder builder) {
  47. return new JpaTransactionManager(productEntityManagerFactory(builder));
  48. }
  49. }

依照代码在相对应的包下建实体类和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. Uva 10820 交表

    题目链接:https://uva.onlinejudge.org/external/108/10820.pdf 题意: 对于两个整数 x,y,输出一个函数f(x,y),有个选手想交表,但是,表太大,需 ...

  2. http协议的发展历史

    在最早的时候,第一个定稿的http协议是http/0.9版本,在这个版本里面,http协议,它的内容,非常非常的简单 只有一个命令,就是GET 对应的就是我们现在经常用到的get请求,post请求,这 ...

  3. jade在命令行实时编译

    jade文件: doctype html html head title jade study body h1 imoock jade study 在jade文件夹下,终端输入 jade index. ...

  4. 深入浅出Nginx

    深入浅出Nginx   文章源自zfz_linux_boy   前言 Nginx是一款轻量级的Web服务器.反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用. 上图基 ...

  5. 2017.10.13 Java中引用类型变量的创建及使用&循环高级写法

    今日内容介绍 1.引用类型变量的创建及使用 2.流程控制语句之选择语句 3.流程控制语句之循环语句 4.循环高级 ###01创建引用类型变量公式     * A: 创建引用类型变量公式         ...

  6. R语言网络爬虫学习 基于rvest包

    R语言网络爬虫学习 基于rvest包 龙君蛋君:2015年3月26日 1.背景介绍: 前几天看到有人写了一篇用R爬虫的文章,感兴趣,于是自己学习了.好吧,其实我和那篇文章R语言爬虫初尝试-基于RVES ...

  7. HttpServerUtility 和 HttpUyility

    参考:msdn HttpServerUtility 提供用于处理 Web 请求的 Helper 方法. 2017/08/07            加密解码 这个类没有构造函数,所以不能直接new. ...

  8. 键盘遮挡控件(textfield/textview.......)

    采用的是通知的常规方式 // 解决键盘遮挡问题//选择didShow是因为需要键盘的高度//选择willHide是因为视图frame重置需要优先于键盘消失,否则表现得不连贯 [[NSNotificat ...

  9. BZOJ3669: [Noi2014]魔法森林(瓶颈生成树 LCT)

    Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 3558  Solved: 2283[Submit][Status][Discuss] Descript ...

  10. 关于Pycharm基本操作笔记

    创建 project(工程,译音:破拽科特) 1.Create New project(创建一个新的工程,译音:科瑞特 纽 破摘科特) 2.pure python(纯派森,译音:皮忧儿 派森) 3.l ...