返回顶部
首页 > 资讯 > 精选 >Springboot怎么同时装配两个相同类型数据库
  • 147
分享到

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

2023-06-25 15:06:55 147人浏览 安东尼
摘要

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

这篇文章给大家分享的是有关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怎么同时装配两个相同类型数据库”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Springboot怎么同时装配两个相同类型数据库

本文链接: https://lsjlt.com/news/305764.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Springboot怎么同时装配两个相同类型数据库
    这篇文章给大家分享的是有关Springboot怎么同时装配两个相同类型数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。同时装配两个相同类型数据库1.配置文件:spring:  profil...
    99+
    2023-06-25
  • Springboot如何同时装配两个相同类型数据库
    目录同时装配两个相同类型数据库配置连接两个或多个数据库同时装配两个相同类型数据库 1.配置文件: spring: profiles: active: dev ...
    99+
    2024-04-02
  • 一个数据库同时安装两个Wordpress咋整?
    主要出于两个目的,第一收集比便大家和以后学习回顾;第二,从基础做一些实用的,增加搜索量,提高博客流量。目标很明确,ItBuLu不喜欢复制黏贴,正好开始研究WP,故整理一二。很多时候,我们购买的虚拟主机都带有子目录,可以建...
    99+
    2022-06-12
    安装两个 Wordpress
  • vlookup两个表如何匹配相同数据
    使用VLOOKUP函数可以在两个表中匹配相同的数据。VLOOKUP函数的语法如下:VLOOKUP(lookup_value, tab...
    99+
    2023-09-07
    vlookup
  • 两个oracle数据库怎么同步数据
    要同步两个Oracle数据库的数据,可以使用以下方法: 数据库链接:可以在一个数据库中创建一个数据库链接,然后通过该链接在另一个...
    99+
    2024-04-22
    oracle
  • python2.7能不能同时连接两个数据库
    本篇内容主要讲解“python2.7能不能同时连接两个数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python2.7能不能同时连接两个数据库”吧!一、前言这个问题是本人在开发的时候,遇到...
    99+
    2023-06-02
  • HashMap怎么实现保存两个key相同的数据
    这篇文章主要讲解了“HashMap怎么实现保存两个key相同的数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HashMap怎么实现保存两个key相同的数据”吧!HashMap如何保存两个...
    99+
    2023-06-20
  • MS SQL Server数据库两个库之间相同数据表名内容批
    上一篇“导出记录数量对比-软件测试方法(一)”,主要介绍数据导出结果记录数量和原始正常好库的记录数量精确对比,测试软件导出少数据的相关bug。本文测试方法旨在更精确比对表记录内部数据差异,记录数量的对比只是...
    99+
    2024-04-02
  • mysql中同时查询两个数据库中数据的方法
    这篇文章给大家分享的是有关mysql中同时查询两个数据库中数据的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql中同时查询两个数据库中数据的方法:首先打开编辑器sub...
    99+
    2024-04-02
  • springboot怎么连接不同数据库
    今天小编给大家分享一下springboot怎么连接不同数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MySQL当url...
    99+
    2023-07-06
  • SpringBoot项目中如何同时操作多个数据库
    本篇内容主要讲解“SpringBoot项目中如何同时操作多个数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot项目中如何同时操作多个数据库”吧!在实际项目开发中可能存在需要...
    99+
    2023-06-29
  • springboot怎么连接两个数据库
    这篇“springboot怎么连接两个数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot怎么连接两个数...
    99+
    2023-06-29
  • oracle数据库怎么查询几个结构相同的表
    要查询多个结构相同的表,可以使用 union 运算符将每个表的 select 语句连接起来,确保列数和类型匹配。具体步骤包括:1. 确定要查询的列;2. 编写 uni...
    99+
    2024-04-18
    oracle
  • php怎么操作数据库查询相同的数据
    在开发Web应用程序时,通常需要从数据库检索数据。而在检索过程中,有时会发现需要查询相同数据的请求量大,这时候如何优化查询就变得非常重要。本文将介绍在PHP中如何操作数据库查询相同的数据。使用GROUP BY语句在MySQL中使用GROUP...
    99+
    2023-05-14
    php 数据库
  • 两个jar包下相同包名类名引入冲突怎么办
    这篇文章将为大家详细讲解有关两个jar包下相同包名类名引入冲突怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。有时候引入的jar包中的包名类名与其他jar包中的包名类名相同,导致程序在编译或运行的时候...
    99+
    2023-06-29
  • php怎么对比两个数组是否有相同元素
    对比方法:1、利用array_intersect_assoc()函数对比两个数组的键名和键值,语法“array_intersect_assoc($arr1,$arr2)”,会返回一个包含相同元素的交集数组;2、利用“==”运算符判断交集数组...
    99+
    2022-06-14
    php php数组
  • php怎么比较两个数组去除相同的元素
    实现步骤:1、用array_intersect()比较两个数组并获取相同元素,语法“array_intersect(原数组1,原数组2)”,会返回一个包含相同元素的交集数组;2、用array_diff()分别将两个原数组和交集数组进行对比,...
    99+
    2024-04-02
  • oracle怎么查询两个表不同的数据
    在Oracle中,可以使用以下几种方式来查询两个表不同的数据:1. 使用MINUS运算符:```sqlSELECT colu...
    99+
    2023-08-31
    oracle
  • C#怎么打印不同的数据类型
    这篇文章主要介绍“C#怎么打印不同的数据类型”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么打印不同的数据类型”文章能帮助大家解决问题。下面的实例演示了几个相同的函数 print()...
    99+
    2023-06-17
  • oracle数据库怎么同步到另一个数据库
    要将Oracle数据库同步到另一个数据库,可以使用以下方法:1. 数据库备份和还原:在源数据库中进行全量备份,然后将备份文件复制到目...
    99+
    2023-09-17
    oracle数据库 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作