永远离不开的小工具

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

客户信息同步,由于是线上敏感字段都是加密处理,所以需要你再写个程序解密处理一下?

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

01

说思路

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

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

然后需要提供一个触发 shell 脚本,术业有专攻,考虑到运维同事在线上操作的方便,一键便可运行。

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

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

所以线上发布的 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

仔细看的你们,应该发现很简单,就是进入应用目录,然后配置 CLASSPATH,最后运行 java Main 再加上参数。

这样运维同事在线上操作时,就无需关注数据处理 Java 程序这些东东啦,直接运行 shell 脚本就 ok 了,术业有专攻,那么运维遇到 shell 脚本,应该是最亲热不过了。

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'

希望今天的简单分享,能帮助你们提高工作的效率,腾出更多时间去喝咖啡。

今天的分享就到这儿吧,如果你们感觉稍微有点意思,不用赞赏,就点击右下角的“在看”,或者多多分享转发给你们的朋友就很感激。

原文发布于微信公众号 - 一猿小讲(yiyuanxiaojiangV5)

原文发表时间:2019-06-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券