端午三天假,学习了JRuby,Groovy.最后还是觉得Groovy比较容易上手。用Groovy有点当年写basic的感觉,不再有java那样那么多条条框框。开发的时候更多的是在用代码描述自己的执行逻辑,而不是为了实现某种逻辑功能去编写大量符合java"定式"的类。
Groovy给我的感觉就2个字"飘逸",在编码方面很多地方java工作量是非常繁琐而Groovy封装的相当成功,或许AOP的精华也就在此。
每个月我要对DB2数据库进行Runstatus操作,要备份语句,上传语句到目的机器,并执行。每个月如此,只是每个月要执行的语句会变化,因为表也在不断变化中。这部分工作很机械,以前就像过写一个什么东西自动化一把。可惜没做.... 刚好学了Groovy就用它实现吧
下面贴出Groovy程序 DB2Runstatus.groovy
import groovy.sql.sql import java.text.SimpleDateFormat import telnet.TelnetSample //实现生成脚本文件 def user="用户名" def pass="密码" def schema=this.args[0] def bartDateFormat = new SimpleDateFormat("yyyy-MMMM-dd-EEEE"); def filePath="D:/数据库维护/Runstats/" //这个目录要事先建立好 def fileDir=filePath+bartDateFormat.format(new Date()) def fileName=fileDir+"/"+"${schema}.sql" def linesp="/n" def fileObjectDir=new File(fileDir) //没有目录先创建目录 if(!fileObjectDir.exists()) fileObjectDir.mkdir() def sql = sql.newInstance("jdbc:db2://10.154.144.38:50000/hndpdb","${user}","${pass}","com.ibm.db2.jcc.DB2Driver") file1 =new File(fileName) //先删除已经存在的文件 if(file1.exists()) file1.delete() sql.eachRow("select Rtrim(TABSCHEMA)||'.'||TABNAME AS TABLE from syscat.tables where TABSCHEMA='${schema}'",{ file1 << " RUNSTATS ON TABLE ${it.TABLE} ON KEY COLUMNS WITH disTRIBUTION ON ALL COLUMNS AND SAMPLED DETAILED INDEXES ALL ALLOW WRITE ACCESS ${linesp}" file1 << " REORG TABLE ${it.TABLE} ALLOW READ ACCESS ${linesp}" file1 << " REORG INDEXES ALL FOR TABLE ${it.TABLE} ALLOW READ ACCESS ${linesp}" file1 << " RUNSTATS ON TABLE ${it.TABLE} ON KEY COLUMNS WITH disTRIBUTION ON ALL COLUMNS AND SAMPLED DETAILED INDEXES ALL ALLOW WRITE ACCESS ${linesp}" } ) sql.close() //上传脚本文件 def ftpName=fileDir+"/"+"${schema}.ftp" ftpFile=new File(ftpName) //先删除已经存在的文件 if(ftpFile.exists()) ftpFile.delete() //生成ftp脚本 ftpFile <<"""open 10.154.144.40 ${user} ${pass} cd deep/tmp prompt delete ${schema}.sql put ${fileName} bye """ //执行脚本 def command = "ftp -s:${ftpName}" def proc = command.execute() proc.waitFor() println "输出: ${proc.in.text}" println "错误信息: ${proc.err.text}" //远程端执行sql TelnetSample telnet = new TelnetSample( "10.154.144.40","${pass}") telnet.sendCommand( "cd deep/tmp" ); telnet.sendCommand( "db2 connect to hndpdb user ${user} using ${pass}" ); telnet.sendCommand( "nohup db2 -vf ${schema}.sql &" );
短短60行的代码就实现了从备份到FTP再执行的任务,HOHO~ 执行的方式也很简单,再CLI模式下 groovy DB2Runstatus.groovy [表模式名] 假设我要执行ODS层的runstatus==> groovy DB2Runstatus.groovy ODS
这样在D:/数据库维护/Runstats/ 目录下 会生成一个当前日期的文件夹,文件夹下会生成一个 ODS.sql 文件和 ODS.ftp文件 分别上 执行语句和FTP语句再执行完之后就会自动 telnet 到目标机器 用Nohup挂载 执行( 这里我登陆的是 AIX 所以用nohup 其他的系统自己参考)
groovy DB2Runstatus.groovy ODS groovy DB2Runstatus.groovy DW groovy DB2Runstatus.groovy WI
再配置到windows执行计划里面去 就OK了
执行groovy的环境必须 JDK >=1.5 并且配置好 环境变量%GRROVY_HOME%
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。