码农永远离不开的小工具

线上应用程序升级,须要把缺失的数据关联补充一下,你写个程序处理一下?java


客户信息同步,因为是线上敏感字段都是加密处理,因此须要你再写个程序解密处理一下?shell


曾记得 N 年前,我常常干这种事情,码这种代码。今天回过头来,对此类事情简单作一个分享,以防大家也遇到此类问题,不妨拿去实践一下,说不定会提升效率呢。数据库


01. 说思路bash



其实上图已经把问题解决思路,简单明了化了,仍是再重复解释一下。app


首先要写一个 Java Main 函数, 接收应用执行所需的参数,例如:数据库链接 URL、用户名、密码;待更新数据的时间等等。运维


而后须要提供一个触发 shell 脚本,术业有专攻,考虑到运维同事在线上操做的方便,一键即可运行。函数


思路清晰以后,其实写数据处理的程序一点都不难。工具


数据处理程序最基本、最简单的写法能够用 JDBC;略显牛掰的能够用 MyBatis,程序写完部署到线上时只须要编译后的 class 文件;另外程序须要引入数据库相关类库(jar 包)以及用到的三方类库;偶尔会接到结合源数据 srcData 来处理线上数据的需求场景。ui


因此线上发布的 package 大体以下:加密


classes 用于存放编译以后的数据处理程序
lib 用于存放数据库相关jar包以及三方类库等
notifyDataUpdate.sh 用于触发数据处理程序的脚本
srcData.txt 源数据(偶尔会解析源数据入库更新等操做)复制代码

02. 讲实现

上面已经说过,写数据处理的程序一点都不难,这个小儿科的东西,也不是我们今天分享的重点(不懂的,问一问度娘,度娘会告诉你一大堆)。

接下来我们仍是重点聊一聊,如何编写触发数据处理程序的 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复制代码


03. 写最后

分享了个简单的数据处理工具,若是咱们再配上一个 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'复制代码


但愿今天的简单分享,能帮助大家提升工做的效率,腾出更多时间去喝咖啡。


今天的分享就到这儿吧,若是大家感受稍微有点意思,不用赞扬,就点击右下角的“在看”,或者多多分享转发给大家的朋友就很感激。

相关文章
相关标签/搜索