工作心得和總結

瓜瓜東西發表於2018-07-14

很久沒有更新部落格,更新部落格更是思路重新梳理的過程會加深技術的理解。工作中越來越體會中還有更多知識要去學習。目前學習的比較凌亂。先做雜記把。

1 spring動態配置資料來源

   網上很多例子,都能實現,開發中存在很多疑慮和不信任,還發現了一些問題,但經過反覆測試和看原始碼,明白了原理就不會再有疑慮,注意一下幾點:

   1 ) 如果資料來源動態新增寫在配置檔案裡,啟動時讀取資料,改spring 配置檔案讀資料庫連線為 屬性檔案java程式碼讀取(這個是spring的功能),如果有動態新增刪除的則需要另外配置一個配置檔案。同時修改 動態資料來源實現類 呼叫實現動態修改

 AbstractRoutingDataSource 的 afterPropertiesSet 方法,,最好看下AbstractRoutingDataSource的原始碼,裡面包含很多個功能

 2 )另外一個要注意的是 採用的  ThreadLocal來安全儲存當前執行緒的 資料來源,但是隻在當前執行緒有效,所以做資料庫操作時要注意,每一個 資料庫的增刪改查之前都要 進行攔截器或者Aop切面實現指定資料來源進行設定(DataSourceContextHolder.set('dbsource')),如果不設定的話極有可能 資料來源為空或切換到了預設資料來源,進而程式出錯

public class DynamicDataSource extends AbstractRoutingDataSource {  
    @Override  
    protected Object determineCurrentLookupKey() {  
        return DataSourceContextHolder.getDbType();  
    }  
    @Override  
    public void setDataSourceLookup(DataSourceLookup dataSourceLookup) {  
        super.setDataSourceLookup(dataSourceLookup);  
    }  
  
    @Override  
    public void setDefaultTargetDataSource(Object defaultTargetDataSource) {  
        super.setDefaultTargetDataSource(defaultTargetDataSource);  
    }  
  
    @Override  
    public void setTargetDataSources(Map targetDataSources) {  
        super.setTargetDataSources(targetDataSources);  
        //這句是重點
        super.afterPropertiesSet();  
    }  
  
}  

然後重寫父類,新增方法

	//用於動態新增新資料來源
	public void addDataSource(Object key,Object dataSource){  
		this.targetDataSources.put(key, dataSource);  
        setTargetDataSources(this.targetDataSources);  
    }
	
	public void removeDataSource(Object key){
		if(null !=key&& !"".equals(key)){
			this.targetDataSources.remove(key);  
	        setTargetDataSources(this.targetDataSources); 
		}
	}

3) 涉及到多資料來源事務的問題好多文章有了,有多種技術多種方法,就不說了

2 Netty 框架的使用

  最近要求用TCP進行兩個程式通訊,所以用來Netty來實現。通過官網介紹知道,其實高併發,無阻塞,高效、低耗的安全框架。兩個看點

  1) 採用多執行緒機制,在建立workgroup時,引數為空則是cpu核心×2個執行緒,有引數則使用引數

  2) 採用ByteBuf 快取儲存字串位元組流,有兩種方式,堆快取和直接快取

3 存在的問題:

   還用到了其他技術,但只做到了知其然但不知其所以然的境界,所以還要好好學習,好多技術例如Shiro原始碼,Vue原始碼框架,Angularjs和React, ES6,HBase,Kafka原始碼,element-ui等,需要去學習。

4 總結

   學習時學習別人碰到的問題和解決方法往往比 如何做對的更能快速學習,解決的思路很重要,多看原始碼多實踐

 

 

相關文章