ToB企服应用市场:ToB评测及商务社交产业平台

标题: Springboot连接两个数据库(以Mysql和H2数据库为例) [打印本页]

作者: 科技颠覆者    时间: 前天 13:26
标题: Springboot连接两个数据库(以Mysql和H2数据库为例)
近期刚刚完成毕业设计,项目中必要使用两处数据库,分布是为网页提供数据的Mysql数据库和提供Corda区块链数据的H2数据库,一并连接展示于网页上。基于此本文提供一种方法。
一、项目结构


相比于原版的项目,如果必要连接两个数据库则必要创建两个文件夹,分别为config文件夹mapper文件夹中新创立的baseMapper和testMapper文件夹,分别存放Mysql数据中的查询语句和H2的查询语句。
如果不是在Mapper中以解释的方式写查询语句,就可以在resources文件夹的xml文件中修改mapper中namespace的位置,如下图:

二、所需依靠

pom.xml文件如下
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <parent>
  7.         <groupId>org.springframework.boot</groupId>
  8.         <artifactId>spring-boot-starter-parent</artifactId>
  9.         <version>3.1.3</version>
  10.     </parent>
  11.     <groupId>org.example</groupId>
  12.     <artifactId>big-event</artifactId>
  13.     <version>1.0-SNAPSHOT</version>
  14.     <packaging>jar</packaging>
  15.     <name>big-event</name>
  16.     <url>http://maven.apache.org</url>
  17.     <properties>
  18.         <maven.compiler.source>17</maven.compiler.source>
  19.         <maven.compiler.target>17</maven.compiler.target>
  20.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21.     </properties>
  22.     <dependencies>
  23.         <!-- web-->
  24.         <dependency>
  25.             <groupId>org.springframework.boot</groupId>
  26.             <artifactId>spring-boot-starter-web</artifactId>
  27.             <version>2.5.6</version>
  28.         </dependency>
  29.         <dependency>
  30.             <groupId>org.mybatis.spring.boot</groupId>
  31.             <artifactId>mybatis-spring-boot-starter</artifactId>
  32.             <version>3.0.0</version>
  33.         </dependency>
  34.         <dependency>
  35.             <groupId>com.mysql</groupId>
  36.             <artifactId>mysql-connector-j</artifactId>
  37.         </dependency>
  38.         <dependency>
  39.             <groupId>org.projectlombok</groupId>
  40.             <artifactId>lombok</artifactId>
  41.         </dependency>
  42.         <dependency>
  43.             <groupId>org.springframework.boot</groupId>
  44.             <artifactId>spring-boot-starter-validation</artifactId>
  45.         </dependency>
  46.         <dependency>
  47.             <groupId>com.auth0</groupId>
  48.             <artifactId>java-jwt</artifactId>
  49.             <version>4.4.0</version>
  50.         </dependency>
  51.         <dependency>
  52.             <groupId>org.springframework.boot</groupId>
  53.             <artifactId>spring-boot-starter-test</artifactId>
  54.             <version>2.5.6</version>
  55.         </dependency>
  56.         <dependency>
  57.             <groupId>com.github.pagehelper</groupId>
  58.             <artifactId>pagehelper-spring-boot-starter</artifactId>
  59.             <version>1.4.6</version>
  60.         </dependency>
  61.         <dependency>
  62.             <groupId>org.springframework.boot</groupId>
  63.             <artifactId>spring-boot-starter-data-redis</artifactId>
  64.         </dependency>
  65.         <dependency>
  66.             <groupId>com.h2database</groupId>
  67.             <artifactId>h2</artifactId>
  68.             <scope>runtime</scope>
  69.         </dependency>
  70.         <dependency>
  71.             <groupId>com.alibaba</groupId>
  72.             <artifactId>druid</artifactId>
  73.             <version>1.1.12</version>
  74.         </dependency>
  75.         <dependency>
  76.             <groupId>com.aliyun.oss</groupId>
  77.             <artifactId>aliyun-sdk-oss</artifactId>
  78.             <version>3.15.1</version>
  79.         </dependency>
  80.         <dependency>
  81.             <groupId>javax.xml.bind</groupId>
  82.             <artifactId>jaxb-api</artifactId>
  83.             <version>2.3.1</version>
  84.         </dependency>
  85.         <dependency>
  86.             <groupId>javax.activation</groupId>
  87.             <artifactId>activation</artifactId>
  88.             <version>1.1.1</version>
  89.         </dependency>
  90.         <!-- no more than 2.3.3-->
  91.         <dependency>
  92.             <groupId>org.glassfish.jaxb</groupId>
  93.             <artifactId>jaxb-runtime</artifactId>
  94.             <version>2.3.3</version>
  95.         </dependency>
  96. <!--        <dependency>-->
  97. <!--            <groupId>org.example</groupId>-->
  98. <!--            <artifactId>multipleDataConnection</artifactId>-->
  99. <!--            <version>1.0-SNAPSHOT</version>-->
  100. <!--        </dependency>-->
  101.     </dependencies>
  102.     <build>
  103.         <plugins>
  104.             <plugin>
  105.                 <groupId>org.springframework.boot</groupId>
  106.                 <artifactId>spring-boot-maven-plugin</artifactId>
  107.                 <version>3.1.3</version>
  108.             </plugin>
  109.         </plugins>
  110.     </build>
  111. </project>
复制代码
三、具体配置

在config文件夹中分别创建DataSourceOneConfig和DataSourceTwo两个文件,分别存放Mysql和H2的数据库配置,此中必要根据本身项目的具体配置来改写MapperScangetResources中的mapper路径,配置的具体代码如下。

DataSourceOneConfig:
  1. package org.example.config;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.mybatis.spring.SqlSessionTemplate;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.boot.jdbc.DataSourceBuilder;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.context.annotation.Primary;
  12. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  13. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  14. import org.mybatis.spring.annotation.MapperScan;
  15. import javax.sql.DataSource;
  16. @Configuration
  17. @MapperScan(basePackages = "org.example.mapper.baseMapper", sqlSessionTemplateRef = "db1SqlSessionTemplate")
  18. public class DataSourceOneConfig {
  19.     @Bean
  20.     @ConfigurationProperties(prefix = "spring.datasource.one")
  21.     @Primary
  22.     public DataSource db1DataSource() {
  23.         return DataSourceBuilder.create().build();
  24.     }
  25.     @Bean
  26.     @Primary
  27.     public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
  28.         SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
  29.         bean.setDataSource(dataSource);
  30.         bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:org/example/mapper/*.xml"));
  31.         return bean.getObject();
  32.     }
  33.     @Bean
  34.     @Primary
  35.     public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
  36.         return new DataSourceTransactionManager(dataSource);
  37.     }
  38.     @Bean
  39.     @Primary
  40.     public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
  41.         return new SqlSessionTemplate(sqlSessionFactory);
  42.     }
  43. }
复制代码
DataSourceTwoConfig:
  1. package org.example.config;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.mybatis.spring.SqlSessionTemplate;
  5. import org.springframework.beans.factory.annotation.Qualifier;
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.boot.jdbc.DataSourceBuilder;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  11. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  12. import org.mybatis.spring.annotation.MapperScan;
  13. import javax.sql.DataSource;
  14. @Configuration
  15. @MapperScan(basePackages = "org.example.mapper.testMapper", sqlSessionTemplateRef = "db2SqlSessionTemplate")
  16. public class DataSourceTwoConfig {
  17.     @Bean
  18.     @ConfigurationProperties(prefix = "spring.datasource.two")
  19.     public DataSource db2DataSource() {
  20.         return DataSourceBuilder.create().build();
  21.     }
  22.     @Bean
  23.     public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
  24.         SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
  25.         bean.setDataSource(dataSource);
  26.         //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
  27.         return bean.getObject();
  28.     }
  29.     @Bean
  30.     public DataSourceTransactionManager db2TransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {
  31.         return new DataSourceTransactionManager(dataSource);
  32.     }
  33.     @Bean
  34.     public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
  35.         return new SqlSessionTemplate(sqlSessionFactory);
  36.     }
  37. }
复制代码
创建好以上配置文件后,在application.yml中添加第二个数据库配置,如下:
  1. spring:
  2.   datasource:
  3.     one:
  4.       type: com.alibaba.druid.pool.DruidDataSource
  5.       driver-class-name: com.mysql.cj.jdbc.Driver
  6.       jdbc-url: jdbc:mysql://localhost:3306/big_event
  7.       username: root
  8.       password: 7777777
  9.     two:
  10.       type: com.alibaba.druid.pool.DruidDataSource
  11.       driver-class-name: org.h2.Driver
  12.       jdbc-url: jdbc:h2:tcp://localhost:10007/node
  13.       username: sa
  14.       password:
复制代码
完成以上步调后,在mapper中创建相应的文件夹,放入对应的Mapper接口(此处包的名称一定要和之前在config中配置的一样):

以上步调均完成后,再调用不同包中的Mapper接口就可以实现多数据库连接了。


 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4