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());
// 处理查询结果
}
}