文档章节

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

o
 osc_a22drz29
发布于 2019/03/28 18:30
字数 689
阅读 15
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

前言:

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

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

 

       情景描述:

       现有项目需要访问不同的数据库,有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

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
SpringBoot系列从入⻔到进阶官方小册

感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18396.html SpringBoot系列从入⻔到进阶官方小册是SpringForAll社区整理的一份简小而又实用的一份小册子,对于整理快速学习SpringBoo...

曹长卿
04/02
22
0
SpringBoot 从入门到进阶系列小册SpringForAll社区全网独家发布

经过小编的整理,将社区的SpringBoot系列从入门到进阶文章进行了小册子制作,领取方式见文末,小册大纲如下: Spring Boot 入门系列 Spring Boot 快速入门 《使用Intellij中的Spring Initia...

SpringForA
03/30
18
0
springboot-logback

5-9 10:39 5-11 10:40 6-15 9:29 Spring-Boot--日志操作【全局异常捕获消息处理-日志控制台输出+日志文件记录】 https://blog.csdn.net/appleyk/article/details/78717388 三、本篇重点,log...

yong230
昨天
0
0
干货最新版 Spring Boot2.1.5 教程+案例合集

最近发了一系列的 Spring Boot 教程,但是发的时候没有顺序,有小伙伴反映不知道该从哪篇文章开始看起,刚好最近工作告一个小小段落,松哥就把这些资料按照学习顺序重新整理了一遍,给大家做...

osc_nd4uekgu
2019/06/14
10
0
2019 原创技术干货整理

公众号的文章改整理一下了,老有小伙伴表示文章找不到,确实是这样,公众号的文章看过了没消化,后来再想找到有点难,有的小伙伴机智的收藏了一下,但是因为收藏夹里的东西太多了,后来还是不...

osc_mfn168vg
01/03
3
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes发布SpringBoot项目过程总结

SpringBoot 项目创建完成后,通常会打成 jar 包运行,如果不使用 Kubernetes 可以直接通过 java -jar 或者脚本启动,如果需要发布到 Kubernetes 环境,那么需要编写 Dockerfile、构建镜像、推...

strict_nerd
05/23
0
0
👉 最新推出【Jenkins扩展篇-API实践|监控】教程🎉🎉🎉 助力全方位Jenkins管理!课程详情可添加小助手微信: proc_code。

本文分享自微信公众号 - DevOps云学堂(idevopsvip)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

泽阳DevOps
02/18
0
0
没错,用三方 Github 做授权登录就是这么简单!(OAuth2.0实战)

本文收录在个人博客:www.chengxy-nds.top,技术资源共享。 上一篇《OAuth2.0 的四种授权方式》文末说过,后续要来一波OAuth2.0实战,耽误了几天今儿终于补上了。 最近在做自己的开源项目(f...

程序员内点事
4分钟前
0
0
Docker可视化工具Portainer

前言 对于新手来说,还是要熟悉并掌握Docker命令,因为它的命令还是非常清晰简单的。随着逐渐熟悉命令后,为了提高工作效率我们可以考虑借助一些工具协助。目前业界对于Docker可视化工具比较...

ville
8分钟前
7
0
从 Git 仓库的 Commit 历史中移除敏感文件

在很多情况,我们由于疏忽会将一些敏感信息误传到 Git 仓库上面去。 尽管我们可以使用git rm将包含敏感信息文件删除掉,然后重新提交上传,文件就不会在仓库文件列表显示。 但是这并不能完全...

A_laoshiren
13分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部