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());
        // 处理查询结果
    }
}
相关推荐
QX_hao3 小时前
【Go】--map和struct数据类型
开发语言·后端·golang
MC丶科4 小时前
【SpringBoot 快速上手实战系列】5 分钟用 Spring Boot 搭建一个用户管理系统(含前后端分离)!新手也能一次跑通!
java·vue.js·spring boot·后端
G探险者4 小时前
为何一个系统上线要经过N轮测试?带你看懂企业级发布体系
后端
TDengine (老段)5 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)5 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
安当加密5 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
lang201509286 小时前
Spring Boot 入门:5分钟搭建Hello World
java·spring boot·后端
爱喝白开水a6 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
想ai抽6 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库