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

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

springboot中mybatis多數據源動態切換實現

瀏覽:191日期:2023-02-23 14:01:13
目錄多數據源配置引入動態數據源路由實現動態數據源切換使用案例源碼

在開發中,動態數據源配置還是用的比較多的,比如在多數據源使用方面,又或者是在多個DB之間切換方面。這里給出一個動態數據源的配置方案,兩個DB均以mysql為例。

多數據源配置引入

mybatis和mysql在springboot中的引入這里就不在說了,不了解的可以參見springboot中mysql與mybatis的引入。

數據源配置如下:

datasource: master: type: com.alibaba.druid.pool.DruidDataSource jdbc-url: jdbc:mysql://127.0.0.1:3306/sbac_master?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver log: type: com.alibaba.druid.pool.DruidDataSource jdbc-url: jdbc:mysql://127.0.0.1:3306/sbac_log?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true username: root password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver

mybatis的配置引入如下:

mybatis: config-location: classpath:mybatis-config.xml mapper-locations: classpath:com/lazycece/sbac/mysql/data/dao/*/mapper/*.xml

這里已然使用的是springboot的自動配置功能配置mybatis信息,只是手動指定了數據源的。如下所示,指定了master和log兩個數據源,設置master為默認數據源:

@Configurationpublic class MultiDataSource { public static final String MASTER_DATA_SOURCE = 'masterDataSource'; public static final String LOG_DATA_SOURCE = 'logDataSource'; @Bean(name = MultiDataSource.MASTER_DATA_SOURCE) @ConfigurationProperties(prefix = 'datasource.master') public DataSource masterDataSource() {return DataSourceBuilder.create().build(); } @Bean(name = MultiDataSource.LOG_DATA_SOURCE) @ConfigurationProperties(prefix = 'datasource.log') public DataSource logDataSource() {return DataSourceBuilder.create().build(); } @Primary @Bean(name = 'dynamicDataSource') public DynamicDataSource dataSource() {DynamicDataSource dynamicDataSource = new DynamicDataSource();dynamicDataSource.setDefaultTargetDataSource(masterDataSource());Map<Object, Object> dataSourceMap = new HashMap<>(4);dataSourceMap.put(MASTER_DATA_SOURCE, masterDataSource());dataSourceMap.put(LOG_DATA_SOURCE, logDataSource());dynamicDataSource.setTargetDataSources(dataSourceMap);return dynamicDataSource; }}動態數據源路由實現

引入了配置信息之后,便是該說如何實現多數據源切換了。我們是通過實現AbstractRoutingDataSource類的determineCurrentLookupKey方法來實現數據源的動態路由,設置ThreadLocal線程保護變量存儲數據源key,確保線程間不受影響。

package com.lazycece.sbac.mysql.multi.config;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/** * @author lazycece */public class DynamicDataSource extends AbstractRoutingDataSource { private static final Logger LOGGER = LoggerFactory.getLogger(DynamicDataSource.class); private static final ThreadLocal<String> DATA_SOURCE_KEY = new ThreadLocal<>(); static void changeDataSource(String dataSourceKey) {DATA_SOURCE_KEY.set(dataSourceKey); } static void clearDataSource() {DATA_SOURCE_KEY.remove(); } @Override protected Object determineCurrentLookupKey() {String key = DATA_SOURCE_KEY.get();LOGGER.info('current data-source is {}', key);return key; }}

隨后,便是用AOP的方式來實現數據源的動態切換,注解和切面定義如下:

@Documented@Inherited@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})public @interface DataSource { String value();}@Component@Aspectpublic class DataSourceConfig { @Before('@annotation(dataSource)') public void beforeSwitchDataSource(DataSource dataSource) {DynamicDataSource.changeDataSource(dataSource.value()); } @After('@annotation(DataSource)') public void afterSwitchDataSource() {DynamicDataSource.clearDataSource(); }}動態數據源切換使用

動態數據源切換只需要在業務中使用@DataSource注解來標明需要使用的數據源即可,如下所示(這里只貼出關鍵代碼):

@Servicepublic class DynamicDataSourceServiceImpl implements DynamicDataSourceService { @Resource private UserDao userDao; @Resource private SystemLogDao systemLogDao; @Override @DataSource(value = MultiDataSource.MASTER_DATA_SOURCE) public void addUserInfo(User user) {userDao.insert(user); } @Override @DataSource(value = MultiDataSource.MASTER_DATA_SOURCE) public User getUserInfo(String username) {return userDao.findByUsername(username); } @Override @DataSource(value = MultiDataSource.LOG_DATA_SOURCE) public void addSystemLog(SystemLog systemLog) {systemLogDao.insert(systemLog); } @Override @DataSource(value = MultiDataSource.LOG_DATA_SOURCE) public List<SystemLog> getSystemLogInfo(Date beginTime, Date endTime) {return systemLogDao.findByCreateTime(beginTime, endTime); }}案例源碼

案例源碼地址: https://github.com/lazycece/springboot-actual-combat/tree/master/springboot-ac-mysql/springboot-ac-mysql-multi

到此這篇關于springboot中mybatis多數據源動態切換實現的文章就介紹到這了,更多相關springboot mybatis多數據源動態切換內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩一区二区三免费高清在线观看| 久久精品二区亚洲w码 | 蜜桃久久av一区| 午夜久久99| 欧美精品黄色| 日韩视频二区| 久久不射网站| 亚洲精品进入| 日本va欧美va精品| 欧美日本一区| 国产精品亚洲欧美一级在线| 国产精品欧美日韩一区| 国产极品模特精品一二| 久久久久久久久成人| 国产伦精品一区二区三区千人斩| 欧美视频精品全部免费观看| 国产精品久久久久77777丨| 精品一级视频| 日韩和的一区二在线| 欧美一区二区性| 午夜在线视频观看日韩17c| 一区二区三区网站| 国产欧美一区二区色老头| 你懂的国产精品| 亚洲综合电影| 欧美日韩四区| 日韩精品久久久久久久软件91| 国产精品极品在线观看| 国产一区三区在线播放| 日韩中文欧美| 黄色日韩在线| 日韩在线成人| 麻豆精品视频在线观看免费| 日韩精品诱惑一区?区三区| 2023国产精品久久久精品双| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品久久久久久久久久久久久久久 | 99精品电影| 日韩视频精品在线观看| 久久国产欧美日韩精品| 国产资源在线观看入口av| 亚洲精品一区二区妖精| 亚洲精品影院在线观看| 国产精品久久久久久久免费软件| 日韩一区二区中文| 水蜜桃久久夜色精品一区的特点| 日韩精品久久久久久| 国产精品国产三级国产在线观看| 久久国产中文字幕| 色8久久久久| 国产一区二区三区天码| 亚洲精品1区2区| 91免费精品国偷自产在线在线| 91亚洲国产| 亚洲精品韩国| 91一区二区三区四区| 免费观看日韩电影| 国产成人精品一区二区三区在线| 亚洲精品2区| 国产精品2023| 久久精选视频| 日本午夜精品一区二区三区电影| 美女av在线免费看| 一区二区亚洲视频| 成人欧美一区二区三区的电影| 爽好多水快深点欧美视频| 久久精品色播| 综合激情一区| 欧美日韩视频网站| 91精品美女| 国产精品91一区二区三区| 国产欧美另类| 99在线|亚洲一区二区| 久久精品九色| 亚洲尤物av| 欧美香蕉视频| 日韩国产欧美视频| 国产综合亚洲精品一区二| 国产福利一区二区精品秒拍 | 成人va天堂| 国产精品一区二区中文字幕| 欧美日韩免费观看一区=区三区| 精品欠久久久中文字幕加勒比| 免费人成网站在线观看欧美高清| 色黄视频在线观看| 欧美一区二区三区久久精品| 国内精品福利| 成人日韩av| 欧美一级二区| 国产模特精品视频久久久久| 91亚洲成人| 国产精品v一区二区三区| 日本亚洲欧美天堂免费| 国产亚洲综合精品| 群体交乱之放荡娇妻一区二区| 国产精品地址| 日韩欧美三区| 蜜臀久久99精品久久久久久9| 精品一区免费| 色偷偷色偷偷色偷偷在线视频| 国产免费av国片精品草莓男男| 亚洲综合丁香| 亚洲高清成人| se01亚洲视频| 国产a亚洲精品| 欧美极品一区二区三区| 91亚洲无吗| 日韩高清不卡一区| 中文字幕日韩亚洲| 国产视频一区三区| 欧美aa国产视频| 日本少妇一区| 精品国产第一福利网站| 精品中文在线| 欧美黄页在线免费观看| 欧美中文高清| 色8久久久久| 日韩一区精品视频| 国产亚洲亚洲| 亚洲一区亚洲| 狠狠色综合网| 欧美网站在线| 婷婷六月综合| 欧美在线资源| 亚洲国产一区二区三区在线播放 | 日本久久精品| 中文字幕在线视频久| 中文一区一区三区高中清不卡免费| 精品资源在线| 美女精品一区二区| 麻豆91精品视频| 丁香婷婷久久| 日韩欧美在线中字| 久久久国产精品一区二区中文| 久久久一本精品| 欧美精品一区二区久久| 伊人精品在线| 中文不卡在线| 日本亚洲视频| 国产美女久久| 欧美激情亚洲| 国产 日韩 欧美 综合 一区 | 国产精品1区| 精品五月天堂| 最新中文字幕在线播放| 欧美国产91| 免费看黄色91| 日韩不卡手机在线v区| 国产精品久久久久久久久久白浆 | 一区二区三区国产盗摄| 日韩精品久久久久久久软件91| 国产精品chinese| 黑人精品一区| 亚洲一区中文| 日韩av午夜在线观看| 精品一区二区三区免费看 | 在线视频亚洲欧美中文| 欧美一区自拍| zzzwww在线看片免费| 在线中文字幕播放| 欧美另类专区| 88久久精品| 色婷婷色综合| 欧美专区一区二区三区| 国产欧美自拍| 91精品亚洲| 久热精品在线| 久久不见久久见中文字幕免费| 偷拍精品精品一区二区三区| 国产一区白浆| 国产精成人品2018| 九色精品91| 国产亚洲高清在线观看| 91精品xxx在线观看| 亚洲综合三区| 久久三级毛片| 国产亚洲永久域名| 国产高清精品二区| aa国产精品| 国产精品自在| 久久久久久久久99精品大| 午夜电影一区| 中文字幕在线高清| 亚洲精品高潮| 丝袜诱惑一区二区| 亚洲狼人精品一区二区三区| 精品视频网站| 美女精品网站| 精品免费视频| 五月天久久久| 久久精品国产999大香线蕉| 亚洲激情二区| 精品国产午夜肉伦伦影院| 视频一区二区三区入口| 国产成人免费| 日本在线不卡视频一二三区| 日韩电影免费网址| 日韩精品导航| 亚洲网站视频| 国产精品**亚洲精品|