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());
        // 处理查询结果
    }
}
相关推荐
-曾牛1 分钟前
Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南
java·人工智能·后端·spring·microsoft·spring ai
forestsea22 分钟前
MySQL 入门大全:数据类型
数据库·mysql
为自己_带盐1 小时前
浅聊一下数据库的索引优化
开发语言·数据库·php
gb42152871 小时前
mysql数据库中某个数据表的碎片率自己降低了,mysql数据表对碎片率有自动优化机制吗?
数据库·mysql
shengjk12 小时前
序列化和反序列化:从理论到实践的全方位指南
java·大数据·开发语言·人工智能·后端·ai编程
AI大模型顾潇2 小时前
[特殊字符] 本地大模型编程实战(29):用大语言模型LLM查询图数据库NEO4J(2)
前端·数据库·人工智能·语言模型·自然语言处理·prompt·neo4j
有时间要学习2 小时前
MySQL——数据类型&&表的约束
数据库·mysql
AI改变未来2 小时前
数据库常见故障排查
数据库
bing_1582 小时前
MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?
数据库·mongodb·oracle
feilieren2 小时前
Windows 安装 Milvus
数据库·ai·milvus