JdbcTemplate 配置链接多个数据源的方法
作者:偶尔正经的小明
JdbcTemplate是Spring框架提供的JDBC模板类,用于简化JDBC操作,支持增删改查及事务管理,其核心功能包括简化数据库操作、连接管理、异常处理、灵活的SQL控制等,本文介绍JdbcTemplate 配置链接多个数据源的方法,感兴趣的朋友一起看看吧
JdbcTemplate 是 Spring 框架提供的 JDBC 模板类,旨在简化原生 JDBC 繁琐的数据库操作,支持 增删改查及事务管理,广泛应用于 Spring 及 Spring Boot 项目 。
核心功能与优势
- 简化数据库操作:JdbcTemplate 封装了 JDBC 连接获取、SQL 执行及结果集处理等底层细节,显著减少了样板代码 。
- 连接管理:自动处理数据库连接的获取与释放,防止资源泄漏 。
- 异常处理:将 JDBC 的受检异常转换为 Spring 的统一数据访问异常体系,简化错误处理逻辑 。
- 灵活的 SQL 控制:与 JPA 等全自动 ORM 框架不同,JdbcTemplate 允许开发者 手写原生 SQL,在执行复杂查询或存储过程时更具灵活性 。
- 适用场景:适合小型项目、快速原型开发或需要精细控制 SQL 性能的场景 。
- 对比分析:相比 MyBatis,其配置更简单但自动化映射能力较弱;相比原生 JDBC,开发效率大幅提升 。
- Spring 生态集成:作为 Spring 家族成员,它能无缝集成 Spring 事务管理、依赖注入等核心功能,便于构建分层架构 。
引入所mysql-connector-java和依赖spring-boot-starter-jdbc依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>zhang</groupId>
<artifactId>DataConvertion</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>DataConvertion</name>
<description>DataConvertion</description>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>配置数据库连接信息(注意单数据源url,多数据源需要改成jdbc-url)
spring.application.name=DataConvertion spring.datasource.db1.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.db1.jdbc-url=jdbc:mysql://localhost:3306/xqr?useUnicode=true&characterEncoding=utf8 spring.datasource.db1.username=root spring.datasource.db1.password=root spring.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.db2.jdbc-url=jdbc:mysql://localhost:3306/mcms?useUnicode=true&characterEncoding=utf8 spring.datasource.db2.username=root spring.datasource.db2.password=root
3.配置类配置数据源
package zhang.dataconvertion.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration//表名此类是是配置工具类,让springboot框架将此类当成配置文件加载
public class DatasourceConfig {
//创建第一个数据源(数据库)
@Bean//bean注解用来创建数据源,Bean注解几乎是方法专用。
@Primary//表示该数据源为首选数据源.主要用于分清主次数据源
@ConfigurationProperties(prefix ="spring.datasource.db1" )//ConfigurationProperties用来连接创建谁的数据源对象.读取配置文件的信息。
public DataSource dbOne(){
return DataSourceBuilder.create().build();
}
//创建第二个数据源(数据库)
@Bean //方法名就是对象名
@ConfigurationProperties(prefix ="spring.datasource.db2")
public DataSource dbTwo(){
return DataSourceBuilder.create().build();
}
}配置类配置JdbcTemplate对象
package zhang.dataconvertion.config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
//数据源具体怎么使用就依赖于这个类
//该类作用:给jdbcTemplate注入不同的数据源
@Configuration
public class JdbcTemplateConfig {
@Bean
public JdbcTemplate oneTemplate(@Qualifier("dbOne") DataSource dataSource){//@Qualifier("dbOne")指定第一个数据源。dbOne为数据源对应的方法名。不指定数据源,由于有两个,因此会报错
return new JdbcTemplate(dataSource);
}
@Bean
public JdbcTemplate twoTemplate(@Qualifier("dbTwo") DataSource dataSource){//@Qualifier("dbTwo")指定第二个数据源。dbTwo为数据源对应的方法名
return new JdbcTemplate(dataSource);
}
}5.注入JdbcTemplate使用 @Autowired 和 @Qualifier(“twoTemplate”)或者 @Resource(name = “oneTemplate”)
package zhang.dataconvertion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
@SpringBootApplication
public class DataConvertionApplication implements CommandLineRunner {
@Autowired
@Qualifier("oneTemplate")
private JdbcTemplate oneTemplate;
@Autowired
@Qualifier("twoTemplate")
private JdbcTemplate twoTemplate;
public static void main(String[] args){
SpringApplication.run(DataConvertionApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
List<Map<String, Object>> maps1 = oneTemplate.queryForList("select * from story");
for (Map<String, Object> map : maps1) {
System.out.println(map);
}
List<Map<String, Object>> maps2 = twoTemplate.queryForList("select * from mdiy_dict");
for (Map<String, Object> map : maps2) {
System.out.println(map);
}
}
}到此这篇关于JdbcTemplate 配置链接多个数据源的方法的文章就介绍到这了,更多相关JdbcTemplate 配置数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
