線上應用程序升級,須要把缺失的數據關聯補充一下,你寫個程序處理一下?java
客戶信息同步,因爲是線上敏感字段都是加密處理,因此須要你再寫個程序解密處理一下?shell
曾記得 N 年前,我常常幹這種事情,碼這種代碼。今天回過頭來,對此類事情簡單作一個分享,以防大家也遇到此類問題,不妨拿去實踐一下,說不定會提升效率呢。數據庫
01. 說思路bash
其實上圖已經把問題解決思路,簡單明瞭化了,仍是再重複解釋一下。app
首先要寫一個 Java Main 函數, 接收應用執行所需的參數,例如:數據庫鏈接 URL、用戶名、密碼;待更新數據的時間等等。運維
而後須要提供一個觸發 shell 腳本,術業有專攻,考慮到運維同事在線上操做的方便,一鍵即可運行。函數
思路清晰以後,其實寫數據處理的程序一點都不難。工具
數據處理程序最基本、最簡單的寫法能夠用 JDBC;略顯牛掰的能夠用 MyBatis,程序寫完部署到線上時只須要編譯後的 class 文件;另外程序須要引入數據庫相關類庫(jar 包)以及用到的三方類庫;偶爾會接到結合源數據 srcData 來處理線上數據的需求場景。ui
因此線上發佈的 package 大體以下:加密
classes 用於存放編譯以後的數據處理程序
lib 用於存放數據庫相關jar包以及三方類庫等
notifyDataUpdate.sh 用於觸發數據處理程序的腳本
srcData.txt 源數據(偶爾會解析源數據入庫更新等操做)複製代碼
上面已經說過,寫數據處理的程序一點都不難,這個小兒科的東西,也不是我們今天分享的重點(不懂的,問一問度娘,度娘會告訴你一大堆)。
接下來我們仍是重點聊一聊,如何編寫觸發數據處理程序的 shell 腳本吧,一言不合,直接拋代碼。
#!/usr/bin/ksh
LANG=zh_CN
export LANG
echo "----------" `date` "--------"
cd /usr/app/p2pDataUpdate
# do business
APP_BASE=/usr/app/p2pDataUpdate
LIB_BASE=$APP_BASE/lib
CLASSPATH=./:./classes
CLASSPATH=$CLASSPATH:$LIB_BASE/db2jcc_license_cu.jar
CLASSPATH=$CLASSPATH:$LIB_BASE/db2jcc.jar
export CLASSPATH
java P2PDataUpdate jdbc:db2://localhost:50000/dev username userpwd /usr/app/p2pDataUpdate/srcData.txt複製代碼
分享了個簡單的數據處理工具,若是咱們再配上一個 crontab 定時調度 shell 腳本,那麼就能夠解決業務數據按期同步的場景啦(這個場景用的也比較多)。若是不知道怎麼配合crontab,那麼請回頭看一下之前分享的《一篇文章講透線上應用監控》這篇文章。
爲了讓大家輕鬆玩轉上面這款工具,最後再分享一些經驗(躺過的坑)吧。
經驗一:shell腳本中的空格如何去除?
sed -i 's/\r$//' XXXX.sh複製代碼
經驗二:shell 腳本中如何傳入當前的日期?
LD=`perl -MPOSIX -le 'print strftime "%Y-%m-%d", localtime(time()-86400);'`echo LD=${LD}java P2PDataUpdate jdbc:db2://localhost:50000/dev username userpwd ${LD}複製代碼
經驗三:如何修改 Linux 的時區?
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime複製代碼
經驗四:若是數據建立時間 intime 字段有索引,注意下面的拼接纔會走索引呦
intime>='2012-04-01-00.00.00.000000' and intime<='2012-04-30-23.59.59.999999'複製代碼
但願今天的簡單分享,能幫助大家提升工做的效率,騰出更多時間去喝咖啡。
今天的分享就到這兒吧,若是大家感受稍微有點意思,不用讚揚,就點擊右下角的「在看」,或者多多分享轉發給大家的朋友就很感激。