当前位置: 代码网 > it编程>编程语言>Java > JdbcTemplate 配置链接多个数据源的方法

JdbcTemplate 配置链接多个数据源的方法

2026年04月22日 Java 我要评论
jdbctemplate 是‌spring 框架提供的 jdbc 模板类‌,旨在简化原生 jdbc 繁琐的数据库操作,支持‌增删改查及事务管理‌,广泛应用于&z

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 配置数据源内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com