国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring配置動態數據源實現讀寫分離的方法

Spring配置動態數據源實現讀寫分離的方法

2020-07-29 14:22簡單的土豆 Java教程

這篇文章主要介紹了利用Spring配置動態數據源實現讀寫分離的方法,文中通過示例代碼介紹的很詳細,相信對大家的理解和學習具有一定的參考借鑒價值,藕需要的朋友可以一起學習學習。

前言

最近因為工作的需要,要搭建的一個項目需要實現數據源的讀寫分離,在這里將代碼進行分享,有需要的朋友們可以參考學習。

首先是配置數據源

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!--讀數據源配置-->
<bean id="readDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"destroy-method="close">
//配置省略
</bean>
 
<!--寫數據源配置-->
<bean id="writeDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"destroy-method="close">
//配置省略
</bean>
 
<!-- 動態數據源 -->
<bean id = "dataSource" class="com.potato.common.bean.DynamicDataSource" >
 <!-- 已配置的數據源 -->
 <property name="targetDataSources"
 <map>  
  <entry key="READ" value-ref="readDataSource"/>  
  <entry key="WRITE" value-ref="writeDataSource"/> 
 </map>
 </property>
 <!-- 默認的數據源 -->
 <property name="defaultTargetDataSource" ref="writeDataSource"/>
</bean>

數據源是如何切換的呢?通過動態數據源的配置我們知道原來是通過key來進行切換,這里要使用到org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource,我們可以編寫自己的動態數據源類DynamicDataSource來繼承它。

?
1
2
3
4
5
6
public class DynamicDataSource extends AbstractRoutingDataSource {
 @Override
 protected Object determineCurrentLookupKey() { 
  return DataSourceContextHolder.getType();
 }
}

還需要一個存放key的地方DataSourceContextHolder 為保證切換時線程安全我們使用ThreadLocal來保存我們的key。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class DataSourceContextHolder {
 private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceContextHolder.class);
 public static final String DATA_SOURCE_WRITE = "WRITE";
 public static final String DATA_SOURCE_READ = "READ";
 // 線程本地環境
 private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
 
 // 設置數據源類型
 public static void setType(String type) {
  if(LOGGER.isDebugEnabled())
   LOGGER.debug("==============切換數據源,類型:"+type+"================");
  contextHolder.set(type);
 }
 // 獲取數據源類型
 public static String getType() {
  return (contextHolder.get());
 }
 // 清除數據源類型
 public static void clearType() {
  contextHolder.remove();
 }
}

好了,我們可以通過操作DataSourceContextHolder來實現數據源動態的切換了。小伙伴們可能會說了,難道每次調用方法都要手動選擇要切換的數據源類型?當然不是啦,Spring AOP登場。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Component
@Aspect
public class DynamicDataSourceAspect {
 
 @Pointcut("execution (* com.potato.orm.mapper.*.select*(..)) || execution (* com.potato.orm.mapper.*.count*(..)) ")
 public void readMethodPointcut() {}
 
 @Pointcut("execution (* com.potato.orm.mapper.*.insert*(..)) || execution (* com.potato.orm.mapper.*.update*(..)) || execution (* com.potato.orm.mapper.*.delete*(..))")
 public void writeMethodPointcut() {}
 
 @Before("readMethodPointcut()")
 public void switchReadDataSource(){
  //System.out.println("============切換到讀數據源===========");
  DataSourceContextHolder.setType(DataSourceContextHolder.DATA_SOURCE_READ);
 }
 
 @Before("writeMethodPointcut()")
 public void switchWriteDataSource(){
  //System.out.println("=============切換到寫數據源==========");
  DataSourceContextHolder.setType(DataSourceContextHolder.DATA_SOURCE_WRITE);
 }
 
}

總結

好啦,以上就是這篇文章的全部內容了,在訪問Mapper(本項目使用的是MyBatis啦,相當于是DAO)中查詢方法時會切換到讀數據源,增、刪、改方法會切換到寫數據源。希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

原文鏈接:http://www.jianshu.com/p/077395e7e66f

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | 久久一级黄 | 亚洲一区二区三区在线免费观看 | 爱逼色| 黄色一级电影在线观看 | 一级毛片在线免费看 | 亚洲综合社区 | 国产51人人成人人人人爽色哟哟 | 一级特黄av| 国产一区色 | 精品久久国产老人久久综合 | 99久久影院 | 国产高清精品在线 | 国产精品一区二区av | 亚洲精品久久久一区二区三区 | 亚洲成人福利网 | 亚洲男女视频在线观看 | 中文字幕在线观看 | 99精品欧美一区二区三区综合在线 | 国产精品久久久久永久免费观看 | 国产精品久久久久久久久久大牛 | 精品一区二区三区成人精品 | 久久久久国产 | 在线成人www免费观看视频 | 超级碰在线观看 | 欧美在线a | 色www精品视频在线观看 | 成人网页在线 | 中文字幕一区二区三区乱码在线 | 黄色影片免费在线观看 | 欧美精品久久 | 超碰毛片| 国产一区二区在线免费观看 | 来个毛片 | 东南亚一级毛片 | 国产视频在线看 | 国产精品久久久久久久久免费桃花 | av网站观看 | www.久久.com| 国产色网 | 久久夜色精品国产 |