我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Springboot怎么同时装配两个相同类型数据库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Springboot怎么同时装配两个相同类型数据库

这篇文章给大家分享的是有关Springboot怎么同时装配两个相同类型数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

同时装配两个相同类型数据库

1.配置文件:

spring:  profiles:    active: dev   datasource:    primary:      jdbc-url: jdbc:sqlserver://localhost:1111;DatabaseName=DB1      driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver      type: com.alibaba.druid.pool.DruidDataSource      username: root      password: root    secondary:      jdbc-url: jdbc:sqlserver://localhost:1111;DatabaseName=DB2      driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver      type: com.alibaba.druid.pool.DruidDataSource      username: root      password: root

2.配置类:

①主配置类:DataSourceConfigPrimary

@Configuration@MapperScan(basePackages = "com.message.dao.primary", sqlSessionFactoryRef = "primarySqlSessionFactory")public class DataSourceConfigPrimary {     // 将这个对象放入Spring容器中    @Bean(name = "primaryDataSource")    // 表示这个数据源是默认数据源    @Primary    // 读取application.properties中的配置参数映射成为一个对象    // prefix表示参数的前缀    @ConfigurationProperties(prefix = "spring.datasource.primary")    public DataSource getDateSourcePrimary()    {        return DataSourceBuilder.create().build();    }     @Bean(name = "primarySqlSessionFactory")    // 表示这个数据源是默认数据源    @Primary    // @Qualifier表示查找Spring容器中名字为test1DataSource的对象    public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource datasource)            throws Exception    {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(datasource);        bean.setMapperLocations(                // 设置mybatis的xml所在位置                new PathMatchingResourcePatternResolver().getResources("classpath:mapper/primary/*.xml"));        return bean.getObject();    }     @Bean("primarySqlSessionTemplate")    // 表示这个数据源是默认数据源    @Primary    public SqlSessionTemplate primarySqlSessionTemplate(            @Qualifier("primarySqlSessionFactory") SqlSessionFactory sessionFactory)    {        return new SqlSessionTemplate(sessionFactory);    }}

②次配置类:DataSourceConfigSecondary

@Configuration@MapperScan(basePackages = "com.message.dao.secondary", sqlSessionFactoryRef = "secondarySqlSessionFactory")public class DataSourceConfigSecondary {    @Bean(name = "secondaryDataSource")    @ConfigurationProperties(prefix = "spring.datasource.secondary")    public DataSource getDateSource2()    {        return DataSourceBuilder.create().build();    }     @Bean(name = "secondarySqlSessionFactory")    public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource datasource)            throws Exception    {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(datasource);        bean.setMapperLocations(                new PathMatchingResourcePatternResolver().getResources("classpath:mapper/secondary/*.xml"));        return bean.getObject();    }     @Bean("secondarySqlSessionTemplate")    public SqlSessionTemplate secondarySqlSessionTemplate(            @Qualifier("secondarySqlSessionFactory") SqlSessionFactory sessionFactory)    {        return new SqlSessionTemplate(sessionFactory);    }}

3.扫描XML

4.启动类:

@SpringBootApplication(scanBasePackages = {"com.lalal.*"})public class MessageApplication extends SpringBootServletInitializer {     public static void main(String[] args) {        SpringApplication.run(MessageApplication.class, args);    }     @Bean    public RestTemplate restTemplate(){        return new RestTemplate();    }}

配置连接两个或多个数据库

背景:

项目中需要从两个不同的数据库查询数据,之前实现方法是:springboot配置连接一个数据源,另一个使用jdbc代码连接。

为了改进,现在使用SpringBoot配置连接两个数据源

实现效果:

一个SpringBoot项目,同时连接两个数据库:比如一个是pgsql数据库,一个是oracle数据库

(啥数据库都一样,连接两个同为oracle的数据库,或两个不同的数据库,只需要更改对应的driver-class-name和jdbc-url等即可)

注意:连接什么数据库,要引入对应数据库的包

实现步骤:

1、修改application.yml,添加一个数据库连接配置

(我这里是yml格式,后缀为properties格式是一样的

server:  port: 7101spring:  jpa:    show-sql: true  datasource:    test1:      driver-class-name: org.postgresql.Driver      jdbc-url: jdbc:postgresql://127.0.0.1:5432/test  #测试数据库      username: root      password: root     test2:      driver-class-name: oracle.jdbc.driver.OracleDriver      jdbc-url: jdbc:oracle:thin:@127.0.0.1:8888:orcl  #测试数据库      username: root      password: root

特别注意:

(1)使用test1、test2区分两个数据库连接

(2)url改为:jdbc-url

2、使用代码进行数据源注入,和扫描dao层路径(以前是在yml文件里配置mybatis扫描dao的路径)

新建config包,包含数据库1和数据库2的配置文件

Springboot怎么同时装配两个相同类型数据库

(1)第一个数据库作为主数据库,项目启动默认连接此数据库

DataSource1Config.java

package com.test.config; import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.jdbc.DataSourceBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration@MapperScan(basePackages = "com.test.dao.test1", sqlSessionTemplateRef  = "test1SqlSessionTemplate")public class DataSource1Config {     @Bean(name = "test1DataSource")    @ConfigurationProperties(prefix = "spring.datasource.test1")    @Primary    public DataSource testDataSource() {        return DataSourceBuilder.create().build();    }     @Bean(name = "test1SqlSessionFactory")    @Primary    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:test1/*.xml"));        return bean.getObject();    }     @Bean(name = "test1TransactionManager")    @Primary    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {        return new DataSourceTransactionManager(dataSource);    }     @Bean(name = "test1SqlSessionTemplate")    @Primary    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {        return new SqlSessionTemplate(sqlSessionFactory);    }}

特别注意:

(1)主数据库都有 @Primary注解,从数据库都没有

(2)第二个数据库作为从数据库

DataSource2Config.java

package com.test.config; import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.jdbc.DataSourceBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration@MapperScan(basePackages = "com.test.dao.test2", sqlSessionTemplateRef  = "test2SqlSessionTemplate")public class DataSource2Config {     @Bean(name = "test2DataSource")    @ConfigurationProperties(prefix = "spring.datasource.test2")    public DataSource testDataSource() {        return DataSourceBuilder.create().build();    }     @Bean(name = "test2SqlSessionFactory")    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();        bean.setDataSource(dataSource);        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:test2/*.xml"));        return bean.getObject();    }     @Bean(name = "test2TransactionManager")    public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {        return new DataSourceTransactionManager(dataSource);    }     @Bean(name = "test2SqlSessionTemplate")    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {        return new SqlSessionTemplate(sqlSessionFactory);    }}

3、 在dao文件夹下,新建test1和test2两个包,分别放两个不同数据库的dao层文件

(1)TestDao1.java

@Componentpublic interface TestDao1 {     List<DailyActivityDataMiddle> selectDailyActivity(); }

(2)TestDao2.java

@Componentpublic interface TestDao2 {     List<MovieShowTest> selectDailyActivity(); }

4、 在resource下新建test1和test2两个文件夹,分别放入对应dao层的xml文件

(我原来项目的dao的xml文件在resource目录下,你们在自己的项目对应目录下即可)

注意dao的java文件和dao的xml文件名字要一致

Springboot怎么同时装配两个相同类型数据库

(1)TestDao1.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.dao.test1.TestDao1">     <select id="selectDailyActivity" resultType="com.test.pojo.DailyActivityDataMiddle">         SELECT * FROM daily_activity_data_middle     </select> </mapper>

(2)TestDao2.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.test.dao.test2.TestDao2">     <select id="selectDailyActivity" resultType="com.test.pojo.MovieShowTest">         SELECT * FROM movieshowtest     </select> </mapper>

5、测试

在controller文件里,注入两个数据库的dao,分别查询数据

@RestControllerpublic class TestController extends BaseController{     @Autowired    private PropertiesUtils propertiesUtils;     @Autowired    private TestDao1 testDao1;     @Autowired    private TestDao2 testDao2;     @RequestMapping(value = {"/test/test1"},method = RequestMethod.POST)    public Result<JSONObject> DataStatistics (@RequestBody JSONObject body) throws Exception {        Result<JSONObject> result = new Result<>(ICommon.SUCCESS, propertiesUtils.get(ICommon.SUCCESS));         JSONObject object = new JSONObject();        object.put("data",testDao1.selectDailyActivity());        result.setResult(object);        return result;    }     @RequestMapping(value = {"/test/test2"},method = RequestMethod.POST)    public Result<JSONObject> DataStatisticsaa (@RequestBody JSONObject body) throws Exception {        Result<JSONObject> result = new Result<>(ICommon.SUCCESS, propertiesUtils.get(ICommon.SUCCESS));         JSONObject object = new JSONObject();        object.put("data",testDao2.selectDailyActivity());        result.setResult(object);        return result;    }}

感谢各位的阅读!关于“Springboot怎么同时装配两个相同类型数据库”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Springboot怎么同时装配两个相同类型数据库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Springboot怎么同时装配两个相同类型数据库

这篇文章给大家分享的是有关Springboot怎么同时装配两个相同类型数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。同时装配两个相同类型数据库1.配置文件:spring: profiles: act
2023-06-25

一个数据库同时安装两个Wordpress咋整?

主要出于两个目的,第一收集比便大家和以后学习回顾;第二,从基础做一些实用的,增加搜索量,提高博客流量。目标很明确,ItBuLu不喜欢复制黏贴,正好开始研究WP,故整理一二OJmNwPGYos。很多http://www.cppcns.com时
2022-06-12

windows中同时安装两个不同版本的mysql数据库

在Windows系统中,可以同时安装多个MySQL版本。本指南详细介绍了分步安装两个不同版本MySQL的过程,包括:准备和下载安装程序安装第一个MySQL版本安装第二个MySQL版本配置Windows服务配置环境变量验证和连接不同版本通过遵循这些步骤,您可以在Windows中成功安装和使用多个MySQL版本,实现不同项目或应用程序使用特定版本的需求。
windows中同时安装两个不同版本的mysql数据库
2024-04-02

两个oracle数据库怎么同步数据

要同步两个Oracle数据库的数据,可以使用以下方法:数据库链接:可以在一个数据库中创建一个数据库链接,然后通过该链接在另一个数据库中执行SQL语句来同步数据。数据库复制:可以使用Oracle GoldenGate或Data Guard等数
两个oracle数据库怎么同步数据
2024-04-22

HashMap怎么实现保存两个key相同的数据

这篇文章主要讲解了“HashMap怎么实现保存两个key相同的数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HashMap怎么实现保存两个key相同的数据”吧!HashMap如何保存两个
2023-06-20

oracle数据库怎么查询几个结构相同的表

要查询多个结构相同的表,可以使用 union 运算符将每个表的 select 语句连接起来,确保列数和类型匹配。具体步骤包括:1. 确定要查询的列;2. 编写 union 查询;3. 执行查询;4. 可选:使用 distinct 消除重复。
oracle数据库怎么查询几个结构相同的表
2024-04-18

PHP怎么计算两个给定整数值的总和以及两个值相同时返回其总和的三倍

这篇文章主要介绍“PHP怎么计算两个给定整数值的总和以及两个值相同时返回其总和的三倍”,在日常操作中,相信很多人在PHP怎么计算两个给定整数值的总和以及两个值相同时返回其总和的三倍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-06-20

怎么使用Springboot封装一个自适配的数据单位转换工具类

今天小编给大家分享一下怎么使用Springboot封装一个自适配的数据单位转换工具类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一
2023-07-05

MySQL CREATE 命令是什么?我们怎样才能用这个命令同时创建数据库和表呢?

CREATE命令是一个DDL命令,用于创建表或数据库。使用CREATE命令创建表和数据库的语法如下 -创建数据库的语法 -Create database database-name;示例mysql> Create database quer
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录