日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot Mybatis動態數據源切換方案實現過程

瀏覽:3日期:2023-05-23 15:04:50

背景

最近讓我做一個大數據的系統,分析了一下,麻煩的地方就是多數據源切換抽取數據。考慮到可以跨服務器跨數據庫抽數,再整理數據,就配置了這個動態數據源的解決方案。在此分享給大家。

實現方案

數據庫配置文件

我們項目使用的是yml形式的配置文件,采用的是hikari的數據庫連接池。第一步我們自然是配置多個數據庫源頭。我們找到spring的datasource,在下方配置三個數據源。

spring: application: name: dynamicDatasource datasource: test1: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test1?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false username: root password: 123456 test2: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test2?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false username: root password: 123456 test3: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test3?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false username: root password: 123456 hikari: leak-detection-threshold: 2000

定義數據源實體類

我們可以建立個datasourceBean文件夾專門管理數據源的實體類。

我們這里要建立三個實體類。分別對應test1,test2,test3

@Configurationpublic class Test1DataSourceBean { @Value('${spring.datasource.test1.driver-class-name}') private String test1Driver; @Value('${spring.datasource.test1.url}') private String test1Url; @Value('${spring.datasource.test1.username}') private String test1Username; @Value('${spring.datasource.test1.password}') private String test1Password; @Bean(name='test1DataSource') public DataSource test1DataSource() throws Exception{ HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName(test1Driver); dataSource.setJdbcUrl(test1Url); dataSource.setUsername(test1Username); dataSource.setPassword(test1Password); return dataSource; }}

@Configurationpublic class Test2DataSourceBean { @Value('${spring.datasource.test2.driver-class-name}') private String test2Driver; @Value('${spring.datasource.test2.url}') private String test2Url; @Value('${spring.datasource.test2.username}') private String test2Username; @Value('${spring.datasource.test2.password}') private String test2Password; @Bean(name='test2DataSource') public DataSource test2DataSource() throws Exception{ HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName(test2Driver); dataSource.setJdbcUrl(test2Url); dataSource.setUsername(test2Username); dataSource.setPassword(test2Password); return dataSource; }}

@Configurationpublic class Test3DataSourceBean { @Value('${spring.datasource.test3.driver-class-name}') private String test3Driver; @Value('${spring.datasource.test3.url}') private String test3Url; @Value('${spring.datasource.test3.username}') private String test3Username; @Value('${spring.datasource.test3.password}') private String test3Password; @Bean(name='test3DataSource') public DataSource test3DataSource() throws Exception{ HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName(test3Driver); dataSource.setJdbcUrl(test3Url); dataSource.setUsername(test3Username); dataSource.setPassword(test3Password); return dataSource; }}

定義一個枚舉類管理數據源

public enum DatabaseType { test1('test1', 'test1'), test2('test2', 'test2'), test3('test3','test3'); private String name; private String value; DatabaseType(String name, String value){ this.name = name; this.value = value; } public String getName(){ return name; } public String getValue(){ return value; }}

定義一個線程安全的數據源容器

public class DatabaseContextHolder { private static final ThreadLocal<DatabaseType> contextHolder = new ThreadLocal<>(); public static void setDatabaseType(DatabaseType type){ contextHolder.set(type); } public static DatabaseType getDatabaseType(){ return contextHolder.get(); }}

定義動態數據源

public class DynamicDataSource extends AbstractRoutingDataSource{ protected Object determineCurrentLookupKey() { return DatabaseContextHolder.getDatabaseType(); }}

mybatis配置類

網上的很多文章配置出來都會產生數據源循環依賴的問題,這里解決了這個問題。

@Configuration@MapperScan(basePackages='cn.test.jichi', sqlSessionFactoryRef='sessionFactory')public class MybatisConfig { /** * @Description:設置動態數據源 */ @Bean(name='dynamicDataSource') @Primary public DynamicDataSource DataSource( @Qualifier('test1DataSource') DataSource test1DataSource, @Qualifier('test2DataSource') DataSource test2DataSource, @Qualifier('test3DataSource') DataSource test3DataSource){ Map<Object, Object> targetDataSource = new HashMap<>(); targetDataSource.put(DatabaseType.test1, test1DataSource); targetDataSource.put(DatabaseType.test2, test2DataSource); targetDataSource.put(DatabaseType.test3, test3DataSource); DynamicDataSource dataSource = new DynamicDataSource(); dataSource.setTargetDataSources(targetDataSource); dataSource.setDefaultTargetDataSource(test1DataSource); return dataSource; } /** * @Description:根據動態數據源創建sessionFactory */ @Bean(name='sessionFactory') public SqlSessionFactory sessionFactory( @Qualifier('test1DataSource') DataSource test1DataSource, @Qualifier('test2DataSource') DataSource test2DataSource, @Qualifier('test3DataSource') DataSource test3DataSource) throws Exception{ SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); //構造方法,解決動態數據源循環依賴問題。 sessionFactoryBean.setDataSource(this.DataSource(test1DataSource,test2DataSource, test3DataSource)); return sessionFactoryBean.getObject(); }}

示例

public void testDymnaicDatasource(){ //不切換數據源默認是自己的。 System.out.println('-----默認數據源'); DemoEntity totalCount = demoMapper.getTotalCount(); String nameCount1 = totalCount.getNameCount(); String ageCount2 = totalCount.getAgeCount(); System.out.println('nameCount:'+nameCount1); System.out.println('ageCount:'+ageCount2); //數據源切換為branch System.out.println('-----數據源為test2'); DynamicDataSourceUtils.chooseBranchDataSource(); Integer nameCount = demoMapper.getNameCount(); Integer ageCount = demoMapper.getAgeCount(); System.out.println('nameCount:'+nameCount); System.out.println('ageCount:'+ageCount); //數據源為basic System.out.println('-----數據源為test3'); DynamicDataSourceUtils.chooseBasicDataSource(); Integer ageCount1 = demoMapper.getAgeCount(); System.out.println('ageCount:'+ageCount1); }

總結

至此實現了多數據源的動態切換。可以在同一個方法里面進行操作多個數據源。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品视频亚洲| 中文字幕在线视频久| 日韩专区在线视频| 日精品一区二区三区| 成人在线视频区| 亚洲一区日本| 91亚洲自偷观看高清| 日本在线不卡视频一二三区| 国产资源在线观看入口av| 亚洲丝袜美腿一区| 特黄特色欧美大片| 国产农村妇女精品一区二区| 精品一区二区三区中文字幕在线| 国语对白精品一区二区| 成人国产精品一区二区免费麻豆| 美腿丝袜亚洲三区| 国产极品模特精品一二| 成人午夜国产| 日韩不卡一区二区三区| 91青青国产在线观看精品| 视频一区二区三区入口| 国产精品99一区二区三区| 爽好久久久欧美精品| 精品72久久久久中文字幕| 亚洲一区黄色| 日韩国产在线| 午夜免费一区| 福利一区二区免费视频| 国产日韩欧美| 国产精品婷婷| 99久久九九| 麻豆一区二区在线| 亚洲一区av| 黄色成人在线网址| 精精国产xxxx视频在线野外| 97久久超碰| 蜜臀精品一区二区三区在线观看| 国产精品毛片一区二区在线看| 国产亚洲第一伦理第一区| 综合国产精品| 日韩专区欧美专区| 色婷婷精品视频| 久久一区视频| 久久字幕精品一区| 国产精品久久久久久久免费软件| 亚洲免费影院| 蜜桃视频一区二区三区在线观看 | 日本不卡在线视频| 久久www成人_看片免费不卡| 色在线视频观看| 国产精品黑丝在线播放| 久久中文在线| 国产91在线播放精品| 狠狠久久伊人| 一区二区小说| 另类专区亚洲| 日韩不卡视频在线观看| 亚洲欧美视频| 久久久亚洲一区| 国产精品成久久久久| 久久精品主播| 日韩动漫一区| 五月婷婷亚洲| 欧美日韩黄网站| 久久国产人妖系列| 中文字幕在线看片| 国产成人精品一区二区三区视频| 一级欧洲+日本+国产| 日韩精品一卡二卡三卡四卡无卡| 久久国产欧美日韩精品| 久久只有精品| 亚洲一区二区网站| 国产在视频一区二区三区吞精| 99国产精品久久久久久久| 国产精品高潮呻吟久久久久| 欧美日韩在线观看视频小说| 日本91福利区| 99精品视频在线| 亚洲久草在线| 国产精品黑丝在线播放| 亚洲精品福利| 一区二区三区视频免费观看 | 久久国产日韩| 亚洲久久视频| 国产欧美日韩在线一区二区| 亚洲伦乱视频| 欧美日韩调教| 2023国产精品久久久精品双| 国产精品成人3p一区二区三区| 亚洲专区视频| 久久亚洲黄色| 久久久一二三| 91麻豆精品| 亚洲午夜视频| 精品午夜视频| 一区二区三区国产在线| 精品亚洲免a| 亚洲影视一区| 极品裸体白嫩激情啪啪国产精品| 在线 亚洲欧美在线综合一区| 国产欧美一区二区精品久久久 | 亚洲欧美日韩国产| 国产传媒av在线| 日韩黄色av| 亚洲免费高清| 欧美肉体xxxx裸体137大胆| 国产精品啊啊啊| 亚欧洲精品视频在线观看| 久久要要av| 日韩av免费| 日韩av自拍| 六月天综合网| 午夜一级在线看亚洲| 另类中文字幕国产精品| 日本久久黄色| 成人午夜毛片| 精品国产成人| 精品三级国产| 国产激情综合| 精品99在线| 精品深夜福利视频| 日韩1区2区| 亚洲啊v在线| 久久久国产精品一区二区中文| 97se综合| 香蕉久久99| 樱桃视频成人在线观看| 亚洲人成在线网站| 伊人久久国产| 欧美日韩一二三四| 三级亚洲高清视频| 日本a级不卡| 卡一卡二国产精品| 激情亚洲影院在线观看| 国产99久久| 亚洲日本欧美| 久久av资源| 韩国三级一区| 久久亚洲欧洲| 国产精品久久久久9999高清| 黄毛片在线观看| 色婷婷精品视频| 亚洲视频电影在线| 国产精品亚洲四区在线观看 | 日韩不卡视频在线观看| 99re国产精品| 日本不卡不码高清免费观看 | 国产视频一区在线观看一区免费| 日韩深夜视频| 免费欧美一区| 国产精品伊人| 91精品久久久久久久久久不卡| 亚洲一区欧美激情| 免费在线观看一区| 欧美另类综合| 国产精品宾馆| 欧美一级专区| 久久亚洲精精品中文字幕| 亚洲电影在线| 免费在线亚洲欧美| 免费在线观看成人| 日韩在线看片| 欧美精品1区| 毛片在线网站| 人人爱人人干婷婷丁香亚洲| 99久久激情| 国产精品伦一区二区| 久久国产成人| 在线日韩av| av资源新版天堂在线| 日韩二区三区在线观看| 国产视频一区三区| av在线日韩| 久久精品国产久精国产爱| 亚洲欧美久久| 激情欧美国产欧美| 9999国产精品| 麻豆一区在线| 视频一区国产视频| 免费日韩av片| 欧美另类专区| 日韩午夜电影| 欧美精品一二| 亚洲香蕉网站| 在线日韩欧美| 日韩av免费| 欧美日韩一区二区三区视频播放| 国产aⅴ精品一区二区三区久久| 国产精品免费不| 国产精品任我爽爆在线播放| 中文字幕日韩亚洲| 久久午夜精品| 免费人成网站在线观看欧美高清| 国产白浆在线免费观看| 日韩欧美一区二区三区在线视频 | 亚洲一区国产| 久久国产福利| 日韩精品一区二区三区中文在线| 午夜一级久久| 日韩精品久久久久久久软件91|