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());
        // 处理查询结果
    }
}
相关推荐
bug菌¹23 分钟前
滚雪球学Oracle[4.2讲]:PL/SQL基础语法
数据库·oracle
逸巽散人33 分钟前
SQL基础教程
数据库·sql·oracle
月空MoonSky1 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa1 小时前
【MySQL 06】表的增删查改
数据库·mysql
杨哥带你写代码1 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端
AskHarries2 小时前
读《show your work》的一点感悟
后端
A尘埃2 小时前
SpringBoot的数据访问
java·spring boot·后端
yang-23072 小时前
端口冲突的解决方案以及SpringBoot自动检测可用端口demo
java·spring boot·后端
Marst Code2 小时前
(Django)初步使用
后端·python·django
代码之光_19802 小时前
SpringBoot校园资料分享平台:设计与实现
java·spring boot·后端