前言:

在上一章中,我们已经搭建好项目,现在来讲一下如何配置数据源。

由于在有的项目中,用的数据源可能会涉及多个,且是不同类型的,我们接下来就讲解多数据源的配置。

情景描述:

现有项目需要访问不同的数据库,有Mysql、Oracle、Sql server数据库

就以该情景为例,讲讲该如何配置。

步骤:

1、在resources文件夹下新建persistence-multiple-db.properties资源文件,如下图:

(备注:具体的值自己配置)

  1. # Mysql数据库
  2. app.datasource.mysql.url=jdbc:mysql://192.168.1.100/XXX数据库名称
  3. app.datasource.mysql.username=username
  4. app.datasource.mysql.password=password
  5. app.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver
  6. app.datasource.mysql.maximum-pool-size=10
  7.  
  8. # Oracle数据库
  9. app.datasource.oracle.url=jdbc:oracle:thin:@192.168.1.100:1521/XXX数据库名称
  10. app.datasource.oracle.username=username
  11. app.datasource.oracle.password=password
  12. app.datasource.oracle.driver-class-name=oracle.jdbc.driver.OracleDriver
  13. app.datasource.oracle.maximum-pool-size=30
  14.  
  15. # Sql server数据库
  16. app.datasource.sqlserver.url=jdbc:sqlserver://192.168.1.100;databaseName=XXX数据库名称
  17. app.datasource.sqlserver.username=username
  18. app.datasource.sqlserver.password=password
  19. app.datasource.sqlserver.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
  20. app.datasource.sqlserver.maximum-pool-size=30

2、在config文件夹中新建MysqlDatabaseConfig.java、OracleDatabaseConfig.java、SqlserverDatabaseConfig.java

在domain文件夹中新建mysql、oracle、sqlserver文件夹

在repository文件夹中新建mysql、oracle、sqlserver文件夹

(备注:命名可以自定义,我这里是为了便于区分)

接下来就依次配置这三个文件,以MysqlDatabaseConfig.java为例说明一下,另外两个同理,但是要注意@Primary(优先考虑,优先考虑被注解的对象注入)注解,另外两个不要添加该注解

  1. package com.hyl.springdemo.config;
  2.  
  3. import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
  4. import com.zaxxer.hikari.HikariDataSource;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.jdbc.DataSourceBuilder;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.context.annotation.Primary;
  10. import org.springframework.context.annotation.PropertySource;
  11. import org.springframework.core.env.Environment;
  12. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  13. import org.springframework.orm.jpa.JpaTransactionManager;
  14. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  15. import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  16. import org.springframework.transaction.PlatformTransactionManager;
  17.  
  18. import javax.sql.DataSource;
  19. import java.util.HashMap;
  20.  
  21. @Configuration
  22. @EnableEncryptableProperties
  23. @PropertySource({ "classpath:persistence-multiple-db.properties" })
  24. @EnableJpaRepositories(
  25. basePackages = "com.hyl.springdemo.repository.mysql",
  26. entityManagerFactoryRef = "mysqlEntityManager",
  27. transactionManagerRef = "mysqlTransactionManager"
  28. )
  29. public class MysqlDatabaseConfig {
  30.  
  31. @Autowired
  32. private Environment env;
  33.  
  34. @Bean
  35. @Primary
  36. public DataSource mysqlDataSource() {
  37.  
  38. HikariDataSource dataSource = DataSourceBuilder.create().type(HikariDataSource.class).build();
  39. dataSource.setDriverClassName(env.getProperty("app.datasource.mysql.driver-class-name"));
  40. dataSource.setJdbcUrl(env.getProperty("app.datasource.mysql.url"));
  41. dataSource.setUsername(env.getProperty("app.datasource.mysql.username"));
  42. dataSource.setPassword(env.getProperty("app.datasource.mysql.password"));
  43. dataSource.setMaximumPoolSize(Integer.parseInt(env.getProperty("app.datasource.mysql.maximum-pool-size")));
  44.  
  45. return dataSource;
  46. }
  47.  
  48. @Bean
  49. @Primary
  50. public LocalContainerEntityManagerFactoryBean mysqlEntityManager() {
  51. LocalContainerEntityManagerFactoryBean em
  52. = new LocalContainerEntityManagerFactoryBean();
  53. em.setDataSource(mysqlDataSource());
  54. em.setPackagesToScan(
  55. new String[] { "com.hyl.springdemo.domain.mysql" });
  56.  
  57. HibernateJpaVendorAdapter vendorAdapter
  58. = new HibernateJpaVendorAdapter();
  59. em.setJpaVendorAdapter(vendorAdapter);
  60. em.setPersistenceUnitName("MysqlPersistenceUnit");
  61. HashMap<String, Object> properties = new HashMap<>();
  62. properties.put("hibernate.hbm2ddl.auto",
  63. env.getProperty("hibernate.hbm2ddl.auto"));
  64. properties.put("hibernate.dialect",
  65. "org.hibernate.dialect.MySQL5Dialect");
  66. em.setJpaPropertyMap(properties);
  67.  
  68. return em;
  69. }
  70.  
  71. @Bean
  72. @Primary
  73. public PlatformTransactionManager mysqlTransactionManager() {
  74.  
  75. JpaTransactionManager transactionManager
  76. = new JpaTransactionManager();
  77. transactionManager.setEntityManagerFactory(
  78. mysqlEntityManager().getObject());
  79. return transactionManager;
  80. }
  81. }

3、新建Repository,访问数据库(关于该部分,在后续的文章中再进行介绍)

4、新建Service层,访问Repository

5、在Controller层中进行调用

6、运行项目,在网页中查看

此篇博文主要是为了介绍配置多数据源,涉及到的其它内容在后续的博文中会逐一介绍

具体源码地址:https://github.com/AnneHan/springboot-demo

欢迎satr or fork

Spring Boot系列学习文章(二) -- 配置多数据源的更多相关文章

  1. Spring Boot系列学习文章(一) -- Intellij IDEA 搭建Spring Boot项目

    前言: 最近做的一个项目是用Spring Boot来做的,所以把工作中遇到的一些知识点.问题点整理一下,做成一系列学习文章,供后续学习Spring Boot的同仁们参考,我也是第一次接触Spring ...

  2. 六、spring boot 1.5.4 配置多数据源

    spring boot 已经支持多数据源配置了,无需网上好多那些编写什么类的,特别麻烦,看看如下解决方案,官方的,放心! 1.首先定义数据源配置 #=====================multi ...

  3. Spring Boot 启动(二) 配置详解

    Spring Boot 启动(二) 配置详解 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Spring Boot 配置 ...

  4. Spring Boot 2.1.1.RELEASE 多数据源配置与使用

    有时候,一个系统的功能,需要两个或两个以上的数据库, 在Spring Boot 中要如何配置? How to? #primary primary.spring.datasource.jdbc-url= ...

  5. Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置

    0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...

  6. Spring boot 基于注解方式配置datasource

    Spring boot 基于注解方式配置datasource 编辑 ​ Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...

  7. spring boot高性能实现二维码扫码登录(上)——单服务器版

    前言 目前网页的主流登录方式是通过手机扫码二维码登录.我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查 ...

  8. Spring Boot 2.0 教程 | 配置 Undertow 容器

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 文章首发于个人网站 https://ww ...

  9. Spring Boot 启动(二) Environment 加载

    Spring Boot 启动(二) Environment 加载 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 上一节中 ...

随机推荐

  1. android(java) 开发过程中经验及总结记录

    android(java) 开发过程中经验及总结记录

  2. python中内建函数isinstance的用法

    语法:isinstance(object,type) 作用:来判断一个对象是否是一个已知的类型. 其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表( ...

  3. (转)学会数据库读写分离、分表分库——用Mycat,这一篇就够了!

    原文:https://www.cnblogs.com/joylee/p/7513038.html 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理 ...

  4. GPS/轨迹追踪、轨迹回放、围栏控制

    折腾一个多月终于弄完了这个项目,起初都未曾接触GPS/轨迹追踪.轨迹回放.圈划围栏...等一些在百度地图或者Googel地图操作的一些业务,后端的业务相对来说简单点 cas单点登录,mongdb灵活的 ...

  5. numpy基本使用2

    #-*- coding:utf-8 -*- import numpy as np ''' numpy:底层由c语言实现,所以速度较快. ''' #1.numpy常用函数 l1=np.array([1, ...

  6. Vue图片懒加载插件 - vue lazyload的简单使用

    Vue module for lazyloading images in your applications. Some of goals of this project worth noting i ...

  7. mysql 删除单表内多个字段重复的数据

    mysql 删除单表内多个字段重复的数据 DELETE from lot_log_payflow WHERE (pay_no,sub_flow_type) in () s1) AND id ) s2) ...

  8. 散列算法-MD5

    信息摘要技术把明文内容按某种规则生成一段哈西值,即使明文消息只改动了一点点,生成的结果也会完全不同. MD5(Message-digest algorithm 5)就是信息摘要的一种实现,它可以从任意 ...

  9. 【转载】表单中 Readonly 和 Disabled 的区别

    今天写代码,遇到表单提交的问题,某个字段在不同的情况下,要传递不同的值进行赋值,试过一些方法都有些问题,后来请教前端同学,使用 disabled 这个属性终于搞定了问题,查到一篇讲解 readonly ...

  10. 【IT笔试面试题整理】删除无序链表中重复的节点

    [试题描述]定义一个函数,输入一个链表,删除无序链表中重复的节点 [参考代码] 方法一: Without a buffer, we can iterate with two pointers: &qu ...