最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot jdbctemplate如何實現多數據源

 更新時間:2024年07月11日 15:15:15   作者:在下,楊江河  
這篇文章主要介紹了springboot jdbctemplate如何實現多數據源問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1.簡介

所謂多數據源,其實就是在一個項目中使用多個數據庫實例中的數據庫或者同一個數據庫實例中多個不同的庫。

在大部分情況下會使用更加強大的持久化框架來訪問數據庫,比如MyBatis、Hibernate或者Spring Data JPA等ORM框架。

使用JDBC是開發(fā)者必備的基礎技能,只有熟悉了基礎的JDBC,才能更加深入地學習其他的ORM框架。

2.舉例

2.1配置多數據源連接信息

spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/jdbctest
spring.datasource.primary.username=root
spring.datasource.primary.password=Yjb123456
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/jdbctest2
spring.datasource.secondary.username=root
spring.datasource.secondary.password=Yjb123456
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver

2.2配置JDBC初始化

創(chuàng)建DataSourceConfig類,在項目啟動時讀取配置文件中的數據庫信息,并對JDBC初始化,具體代碼如下:

在上面的示例中,DataSourceConfig類的作用是在項目啟動時根據特定的前綴加載不同的數據源,再根據構建好的數據源創(chuàng)建不同的JdbcTemplate。

由于Spring容器中存在兩個數據源,使用默認的類型查找時會報錯,因此加上@Qualifier注解,表示按照名稱查找。

這里創(chuàng)建了兩個JdbcTemplate實例,分別對應了兩個數據源。

需要注意的是,使用多個數據源時需要添加@Primary注解,表示自動裝配出現多個Bean候選者時,被注解為@Primary的Bean將作為首選者。

Primary表示“主要的”,類似于SQL語句中的“Primary Key”(主鍵),只能有唯一一個,否則會報錯。

package com.yangjunbo.helloword.properties;

import org.springframework.beans.factory.annotation.Qualifier;
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 org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
    @Primary
    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix="spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean(name = "secondaryDataSource")
    @Qualifier("secondaryDataSource")
    @ConfigurationProperties(prefix="spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean(name="primaryJdbcTemplate")
    public JdbcTemplate primaryJdbcTemplate (
            @Qualifier("primaryDataSource") DataSource dataSource ) {
        return new JdbcTemplate(dataSource);
    }
    @Bean(name="secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(
            @Qualifier("secondaryDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

2.3測試調用多數據源

package com.yangjunbo.helloword;

import com.yangjunbo.helloword.pojo.Student;
import com.yangjunbo.helloword.rowMapper.StudentRowMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SpringBootTest
public class RowMapper {
   
    @Autowired
    private JdbcTemplate primaryJdbcTemplate;

    @Autowired
    private JdbcTemplate secondaryJdbcTemplate;

    @Test
    public void dataSourceTest(){
        Student student = new Student("weiz多數據源",0,30);
        primaryJdbcTemplate.update("INSERT INTO Student(name, sex, age) values(?, ?, ?)",
                student.getName(), student.getSex(), student.getAge());

        secondaryJdbcTemplate.update("INSERT INTO Student(name, sex, age) values(?, ?, ?)",
                student.getName(), student.getSex(), student.getAge());
    }
}

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 基于Java SSM實現在線點餐系統(tǒng)

    基于Java SSM實現在線點餐系統(tǒng)

    本項目基于Java SSM框架實現在線點餐系統(tǒng),主要實現系統(tǒng)的在線點餐功能。文中的示例代碼講解詳細,感興趣的可以跟隨小編一起學習一下
    2022-02-02
  • Java程序設計之12個經典樣例

    Java程序設計之12個經典樣例

    這篇文章主要給大家分享關于Java程序設計11個經典樣例,主要以舉例的形式詳細的講解了Java程序設計的各種方法,需要的朋友可以參考一下文章具體的內容
    2021-10-10
  • springboot集成springsecurity 使用OAUTH2做權限管理的教程

    springboot集成springsecurity 使用OAUTH2做權限管理的教程

    這篇文章主要介紹了springboot集成springsecurity 使用OAUTH2做權限管理的教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java 實戰(zhàn)項目錘煉之網上商城系統(tǒng)的實現流程

    Java 實戰(zhàn)項目錘煉之網上商城系統(tǒng)的實現流程

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java+jsp+servlet+mysql+ajax實現一個網上商城系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • java使用WatchService監(jiān)控文件夾示例

    java使用WatchService監(jiān)控文件夾示例

    本篇文章主要介紹了java使用WatchService監(jiān)控文件夾示例的資料,這里整理了詳細的代碼,有需要的小伙伴可以參考下。
    2017-02-02
  • nacos注冊中心調用服務失敗的解決方案

    nacos注冊中心調用服務失敗的解決方案

    nacos注冊中心出現調用服務失敗的情況,可能是因為注冊了兩個IP地址,一個是開發(fā)/測試環(huán)境,一個是本地啟動的IP,解決方法是將本地的IP從注冊中心下線,以避免干擾其他環(huán)境,確定哪個IP是開發(fā)環(huán)境/測試環(huán)境的IP,可以使用ifconfig命令查看服務器的IP地址
    2026-02-02
  • Java中的WeakHashMap簡析

    Java中的WeakHashMap簡析

    這篇文章主要介紹了Java中的WeakHashMap簡析,Map 的子類常見的有 HashMap、Hashtable、ConcurrentHashMap、LinkedHashMap 等,WeakHashMap,直譯就是,虛弱的 HashMap,從名字可得知其和 HashMap 有關,需要的朋友可以參考下
    2023-09-09
  • SpringBoot對數據庫用戶名和密碼進行加密的兩種方案

    SpringBoot對數據庫用戶名和密碼進行加密的兩種方案

    在當今互聯網時代,?數據庫安全的重要性不言而喻,作為Java開發(fā)的主流框架,Spring Boot項目通常需要連接數據庫,而數據庫的?用戶名和密碼作為最敏感的信息之一,所以本文給大家詳細介紹兩種主流的數據源配置加密方案,需要的朋友可以參考下
    2025-12-12
  • Java的JSON處理器fastjson使用方法詳解

    Java的JSON處理器fastjson使用方法詳解

    下面小編就為大家?guī)硪黄狫ava的JSON處理器fastjson使用方法詳解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • JAVA對字符串進行32位MD5加密的實踐

    JAVA對字符串進行32位MD5加密的實踐

    本文主要介紹了JAVA對字符串進行32位MD5加密的實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論

开原市| 兴隆县| 遂溪县| 洛隆县| 蕲春县| 龙岩市| 鄂州市| 鞍山市| 东兴市| 大同市| 吉林市| 柘城县| 丹凤县| 安顺市| 江达县| 江津市| 浦县| 来凤县| 湖南省| 西贡区| 洮南市| 依兰县| 廉江市| 徐州市| 郯城县| 林周县| 道真| 枞阳县| 通城县| 当阳市| 湛江市| 博乐市| 本溪| 乡城县| 博客| 修水县| 玉林市| 宜州市| 玛纳斯县| 江阴市| 炉霍县|