SpringBoot项目中配多种数据库

SpringBoot项目中配多种数据库

1.测试环境:

数据库: sqlserver2016 mysql-8.0.32-winx64 postgresql-13.14-1-windows-x64

makefile 复制代码
数据库网盘链接:
链接:https://pan.baidu.com/s/11W6jZUZl_lomdMAMW8VXbw 
提取码:qvav 

系统: win10

编辑器: IntelliJ IDEA 2023.3.2

2.SpringBoot项目

首先创建一个SpringBoot项目,我的项目目录大致如下(只要保证是一个可运行的SpringBoot项目即可):

pom.xml

首先是添加我们所需要的依赖,其中jpa和三个数据库相关的依赖是必须的,你可以按需在自己项目里导入

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>cn.calculation</groupId>
        <artifactId>calculation</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>calculation-conformity</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>calculation-conformity</name>
    <description>conformity method test</description>

    <properties>
        <java.version>1.8</java.version>
        <swagger-version>2.9.2</swagger-version>
        <nowtime>${maven.build.timestamp}</nowtime>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <!--jpa-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>


        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger-version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger-version}</version>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-models</artifactId>
            <version>1.5.21</version>
        </dependency>



        <!--sqlserver-->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>

        <!--PostgreSQL-->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.18</version> <!-- 使用最新版本 -->
        </dependency>


    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

application.yml

然后是我的配置文件,基本上是很简单的配置,自己的项目如果能运行则不需要引入我的配置

yml 复制代码
server:
  port: 12301
  servlet:
    encoding:
      charset: UTF-8
      force: true

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

swagger:
  enable: true

MultiDataSourceConfig.java

最关键的一个连接数据库配置的类,其中配置也可以放在配置文件里,然后读取,我这里为了方便直接写在这里了

url username password driverClassName 调成自己的配置

java 复制代码
package cn.calculation.conformity.config;

import javax.sql.DataSource;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MultiDataSourceConfig {

    @Bean(name = "mysqlDataSource")
    public DataSource mysqlDataSource() {
        return DataSourceBuilder
                .create()
                .url("jdbc:mysql://192.168.0.123:3306/practice")
                .username("root1")
                .password("root1")
                .driverClassName("com.mysql.cj.jdbc.Driver")
                .build();
    }

    @Bean(name = "sqlServerDataSource")
    public DataSource sqlServerDataSource() {
        return DataSourceBuilder
                .create()
                .url("jdbc:sqlserver://192.168.0.123:1433;databaseName=practice")
                .username("sa")
                .password("123456")
                .driverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
                .build();
    }


    @Bean(name = "postgreDataSource")
    public DataSource postgreDataSource() {
        return DataSourceBuilder
                .create()
                .url("jdbc:postgresql://192.168.0.123:5432/practice")
                .username("postgres")
                .password("123456")
                .driverClassName("org.postgresql.Driver")
                .build();
    }


}

MultipleDataSourceService.java

配置好数据库配置类之后,验证是否生效,通过注入不同的数据源,来查不同的数据库,我这里验证是通过的。

java 复制代码
package cn.calculation.conformity.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import javax.sql.DataSource;
import java.util.List;
import java.util.Map;

@Service
public class MultipleDataSourceService {


    @Autowired
    @Qualifier("mysqlDataSource")
    private DataSource mysqlDataSource;

    @Autowired
    @Qualifier("sqlServerDataSource")
    private DataSource sqlServerDataSource;

    @Autowired
    @Qualifier("postgreDataSource")
    private DataSource postgreDataSource;

    // 使用数据源进行操作
    public void queryDataFromMysql() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(mysqlDataSource);
        List<Map<String, Object>> result = jdbcTemplate.queryForList("SELECT * FROM sys_user");
        System.err.println(result.size());
        // 处理查询结果
    }

    public void queryDataFromSqlServer() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(sqlServerDataSource);
        List<Map<String, Object>> result = jdbcTemplate.queryForList("SELECT * FROM sys_user");
        System.err.println(result.size());
        // 处理查询结果
    }

    public void queryDataFromPostgreSQL() {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(postgreDataSource);
        List<Map<String, Object>> result = jdbcTemplate.queryForList("SELECT * FROM sys_user");
        System.err.println(result.size());
        // 处理查询结果
    }
}
相关推荐
葫芦和十三5 小时前
图解 MongoDB 26|片键设计:决定集群命运的一个决定
后端·mongodb·agent
Avan_菜菜6 小时前
使用 Docker + rclone 自建 WebDAV
后端·agent·claude
阳光是sunny7 小时前
别再被 worktree 绕晕了!AI 编程时代你必须掌握的 Git 隔离神器
前端·人工智能·后端
万少8 小时前
万少的博客 - 技术分享与解决方案
前端·javascript·后端
咖啡八杯9 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
苍何9 小时前
腾讯再放大招,企微 Agent 大圆开启内测
后端
ethantan9 小时前
一篇讲解AI Agent 组成:像人一样思考的智能体
人工智能·后端·程序员
Cosolar11 小时前
vLLM 生产级部署完全指南
人工智能·后端·架构
IT_陈寒11 小时前
垃圾回收器选错了,我的Java服务内存炸了
前端·人工智能·后端
先吃饱再说12 小时前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库