国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

sharding-jdbc多數(shù)據(jù)源配置

這篇具有很好參考價值的文章主要介紹了sharding-jdbc多數(shù)據(jù)源配置。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

通過sharding-jdbc做分表這里就不多做介紹了,需要的可以看上一片文章

當(dāng)項(xiàng)目中配置了多數(shù)據(jù)源,并且其中一個數(shù)據(jù)源需要使用sharding-jdbc分表時,配置如下

  1. 導(dǎo)入shardingjdbc依賴

  <dependency>
        <groupId>org.apache.shardingsphere</groupId>
        <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
        <version>4.0.1</version>
 </dependency>

這里使用的是4.0.1的配置,和上篇的3.1.0差別不大,詳細(xì)配置大伙可以上官網(wǎng)查閱。

  1. 多數(shù)據(jù)源配置類

shardingsphere數(shù)據(jù)源初始化

package com.efuav.parkingapron.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.shardingsphere.api.config.sharding.KeyGeneratorConfiguration;
import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.strategy.StandardShardingStrategyConfiguration;
import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

@Configuration
@MapperScan(basePackages = "com.efuav.parkingapron.dao.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")
public class DataSourceConfig1 {

    @Value("${spring.shardingsphere.datasource.efuavsystem.username}")
    private String userName;

    @Value("${spring.shardingsphere.datasource.efuavsystem.jdbc-url}")
    private String url;

    @Value("${spring.shardingsphere.datasource.efuavsystem.password}")
    private String userPwd;

    @Value("${spring.shardingsphere.datasource.names}")
    private String dataName;


//    @Primary // 表示這個數(shù)據(jù)源是默認(rèn)數(shù)據(jù)源, 這個注解必須要加,因?yàn)椴患拥脑抯pring將分不清楚那個為主數(shù)據(jù)源(默認(rèn)數(shù)據(jù)源)
//    @Bean(name="db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1") //讀取application.yml中的配置參數(shù)映射成為一個對象
//    public DataSource getDb1DataSource(){
//
//        return DataSourceBuilder.create().build();
//    }

    @Bean(name = "db1DataSource")
    @Qualifier("db1DataSource")
    public DataSource deviceDataSource() throws SQLException {
        return getShardingDataSource();
    }

    @Primary
    @Bean("db1SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // mapper的xml形式文件位置必須要配置,不然將報(bào)錯:no statement (這種錯誤也可能是mapper的xml中,namespace與項(xiàng)目的路徑不一致導(dǎo)致)
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db1/*.xml"));
        return bean.getObject();
    }

    @Primary
    @Bean("db1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }


    DataSource getShardingDataSource() throws SQLException {
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
        // 配置分表規(guī)則
        shardingRuleConfig.getTableRuleConfigs().add(getRealTableRuleConfiguration());
        shardingRuleConfig.getBindingTableGroups().add("ef_uav_realtimedata");

        Properties props = new Properties();
        // 配置shardingsphere是否打印日志
        props.setProperty("sql.show", "true");
        // 創(chuàng)建數(shù)據(jù)源
        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, props);
    }

    // 返回ef_uav_realtimedata表的分表規(guī)則配置
    TableRuleConfiguration getRealTableRuleConfiguration() {
        // 指定數(shù)據(jù)庫及表配置規(guī)則
        TableRuleConfiguration result = new TableRuleConfiguration("ef_uav_realtimedata", "efuavsystem.ef_uav_realtimedata$->{1..5}");
        // 指定分表字段及分表規(guī)則類  TaTable2Algorithm為自定義分表規(guī)則類
        result.setTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("uav_id", new UavPreciseShardingAlgorithm()));
        return result;
    }

    private Map<String, DataSource> createDataSourceMap() {
        Map<String, DataSource> result = new HashMap<>();
        HikariDataSource dbs = new HikariDataSource();
        dbs.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dbs.setJdbcUrl(url);
        dbs.setUsername(userName);
        dbs.setPassword(userPwd);
        result.put(dataName, dbs);
        return result;
    }
}

普通數(shù)據(jù)源初始化

package com.efuav.parkingapron.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
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.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.efuav.parkingapron.dao.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")
public class DataSourceConfig2 {

    @Bean("db2DataSource")
//    @ConfigurationProperties(prefix = "spring.datasource.db2")
    @ConfigurationProperties(prefix = "spring.datasource.infrared")
    public DataSource getDb1DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean("db2SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/db2/*.xml"));
        return bean.getObject();
    }

    @Bean("db2SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
  1. 分表自定義配置規(guī)則(上篇文章有解釋)

package com.efuav.parkingapron.config;

import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;

import javax.annotation.PostConstruct;
import java.util.Collection;
//分表規(guī)則
@Slf4j
public class UavPreciseShardingAlgorithm implements PreciseShardingAlgorithm<String> {
    /**
     * 插入數(shù)據(jù) 改寫表的名稱
     * 查詢 改寫表的名稱
     *
     * @param collection
     * @param preciseShardingValue
     * @return
     */
    @Override
    public String doSharding(Collection<String> collection, PreciseShardingValue<String> preciseShardingValue) {
        //  UAV07JDE6E0020240
        String value = preciseShardingValue.getValue();
        int las = value.charAt(value.length() - 1);
        String tableName = "ef_uav_realtimedata" + ((las % 4)+1);
        log.info("<tableName{}>", tableName);
        return tableName;
    }
}

4.yml配置文件

spring:
  main:
    allow-bean-definition-overriding: true
  datasource:
    infrared:
      jdbc-url: jdbc:mysql://192.168.0.5:13306/infrared?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
      username: root  #用戶名
      password: 123456 #密碼
      driver-class-name: com.mysql.cj.jdbc.Driver  #數(shù)據(jù)庫鏈接驅(qū)動
      type: com.zaxxer.hikari.HikariDataSource
    hikari.minimum-idle: 5
    hikari.maximum-pool-size: 15
    hikari.auto-commit: true
    hikari.idle-timeout: 30000
    hikari.pool-name: DatebookHikariCP
    # 不小于30s 否則會回到默認(rèn)的1800秒, 用來設(shè)置一個connection在連接池中的存活時間,默認(rèn)是1800000,即30分鐘。如果設(shè)置為0,表示存活時間無限大。如果不等于0且小于30秒則會被重置回30分鐘。
    hikari.max-lifetime: 28800000
    hikari.connection-timeout: 30000
    hikari.connection-test-query: SELECT 1
  shardingsphere:
    datasource:
      names: efuavsystem
      efuavsystem:
        jdbc-url: jdbc:mysql://127.0.0.1:3306/ef_uav_system?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
        username: root  #用戶名
        password: 123456 #密碼
        driver-class-name: com.mysql.cj.jdbc.Driver  #數(shù)據(jù)庫鏈接驅(qū)動
        type: com.zaxxer.hikari.HikariDataSource
        # 水平拆分的數(shù)據(jù)庫(表) 配置分庫 + 分表策略 行表達(dá)式分片策略
#    sharding:
#      tables:
#        ef_uav_realtimedata:
#          actual-data-nodes: efuavsystem.ef_uav_realtimedata$->{1..5}
#          table-strategy:
#            standard:
#              precise-algorithm-class-name: com.efuav.parkingapron.config.UavPreciseShardingAlgorithm
#              sharding-column: uav_id
    # 打印執(zhí)行的數(shù)據(jù)庫
#    props:
#      sql:
#        show: true

這樣就不會沖突,以上就是sharding-jdbc多數(shù)據(jù)源配置了。

記錄....文章來源地址http://www.zghlxwxcb.cn/news/detail-624651.html

到了這里,關(guān)于sharding-jdbc多數(shù)據(jù)源配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Mysql Sharding-JDBC讀寫分離

    Mysql Sharding-JDBC讀寫分離

    深入Sharding-JDBC分庫分表從入門到精通【黑馬程序員】_嗶哩嗶哩_bilibili 1.1.1 msyql 多庫 多表 多服務(wù)器? 1.1.2 通過Sharding-JDBC jar包-增強(qiáng)JDBC 訪問多數(shù)據(jù)源 - 自動處理成一個數(shù)據(jù)源 1.1.3 使用數(shù)據(jù)的人 - 使用Sharding-JDBC 自動合成的數(shù)據(jù)源 - 如同 一庫一表操作 ? 1.3.0 課程視頻 07-Shard

    2024年02月02日
    瀏覽(20)
  • Sharding-JDBC分庫連接數(shù)優(yōu)化

    Sharding-JDBC分庫連接數(shù)優(yōu)化

    一、背景 配運(yùn)平臺組的快遞訂單履約中心(cp-eofc)及物流平臺履約中心(jdl-uep-ofc)系統(tǒng)都使用了ShardingSphere生態(tài)的sharding-jdbc作為分庫分表中間件, 整個集群采用只分庫不分表的設(shè)計(jì),共16個MYSQL實(shí)例,每個實(shí)例有32個庫,集群共512個庫. 當(dāng)每增加一臺客戶端主機(jī),一個MYSQl實(shí)例最少要增加

    2024年02月14日
    瀏覽(21)
  • springboot~sharding-jdbc實(shí)現(xiàn)分庫分表

    springboot~sharding-jdbc實(shí)現(xiàn)分庫分表

    當(dāng)mysql數(shù)據(jù)庫單表大于1千萬以后,查詢的性能就不能保證了,我們必須考慮分庫,分表的方案了,還好,sharding-jdbc可以很優(yōu)雅的與springboot對接,完成對mysql的分庫和分表。 為了不影響其它小容量的表,所有添加了動態(tài)數(shù)據(jù)源,只對需要分庫分表的進(jìn)行配置即可 com.baomidou:dy

    2024年02月06日
    瀏覽(16)
  • Sharding-JDBC之PreciseShardingAlgorithm(精確分片算法)

    Sharding-JDBC之PreciseShardingAlgorithm(精確分片算法)

    ??在我之前的文章里,數(shù)據(jù)的分庫分表都是基于行表達(dá)式的方式來實(shí)現(xiàn)的,看起來也蠻好用,也挺簡單的,但是有時會有些復(fù)雜的規(guī)則,可能使用行表達(dá)式策略會很復(fù)雜或者實(shí)現(xiàn)不了,我們就講另外一種分片策略,精確分片算法,通常用來處理=或者in條件的情況比較多。

    2024年02月11日
    瀏覽(18)
  • springboot~對應(yīng)sharding-jdbc實(shí)現(xiàn)分庫分表

    springboot~對應(yīng)sharding-jdbc實(shí)現(xiàn)分庫分表

    當(dāng)mysql數(shù)據(jù)庫單表大于1千萬以后,查詢的性能就不能保證了,我們必須考慮分庫,分表的方案了,還好,sharding-jdbc可以很優(yōu)雅的與springboot對接,完成對mysql的分庫和分表。 為了不影響其它小容量的表,所有添加了動態(tài)數(shù)據(jù)源,只對需要分庫分表的進(jìn)行配置即可 com.baomidou:dy

    2024年02月06日
    瀏覽(18)
  • springboot整合sharding-jdbc實(shí)現(xiàn)分庫分表詳解

    目錄 一、為什么需要分庫分表 1.1 分庫分表的優(yōu)勢 二、分庫分表基本概念 2.1 垂直分表

    2024年02月05日
    瀏覽(54)
  • Sharding-JDBC分庫分表四種分片算法

    Sharding-JDBC分庫分表四種分片算法

    精確分片算法(PreciseShardingAlgorithm)精確分片算法(=與IN語句),用于處理使用單一鍵作為分片鍵的=與IN進(jìn)行分片的場景。需要配合StandardShardingStrategy使用 范圍分片算法(RangeShardingAlgorithm)用于處理使用單一鍵作為分片鍵的BETWEEN AND進(jìn)行分片的場景。需要配合StandardShardingS

    2024年02月10日
    瀏覽(18)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義JDBC多數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對大多數(shù)人來說,學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個可工作的DEMO入手。但在我個人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時間、檢索不止一篇資料才能得出一個可工作的DEMO,這占用了我大量的時

    2024年01月23日
    瀏覽(28)
  • 多數(shù)據(jù)源配置從庫連接sqlserver報(bào)錯,com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establis

    多數(shù)據(jù)源配置從庫連接sqlserver報(bào)錯,com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establis

    一開始我自己本地配置如下: 微軟家的sqlserver驅(qū)動不好用,maven的驅(qū)動如下: 然后在本地網(wǎng)段一致的情況下測試是沒有問題的,當(dāng)部署線上環(huán)境啟動服務(wù)時,加載數(shù)據(jù)源的時候,當(dāng)加載到sqlserver的數(shù)據(jù)源的時候就開始異常了,異常信息如下: 網(wǎng)上有說修改JDK什么的解決: 這

    2024年02月11日
    瀏覽(20)
  • Spark SQL數(shù)據(jù)源:JDBC

    Spark SQL數(shù)據(jù)源:JDBC

    Spark SQL還可以使用JDBC API從其他關(guān)系型數(shù)據(jù)庫讀取數(shù)據(jù),返回的結(jié)果仍然是一個DataFrame,可以很容易地在Spark SQL中處理,或者與其他數(shù)據(jù)源進(jìn)行連接查詢。 在使用JDBC連接數(shù)據(jù)庫時可以指定相應(yīng)的連接屬性 屬性 介紹 url 連接的JDBC URL driver JDBC驅(qū)動的類名 user 數(shù)據(jù)庫用戶名 pass

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包