飘逸的Groovy,利用Groovy+windows执行计划 实现动态RunstatusDb2数据库
2008-06-12 12:44
344 查看
端午三天假,学习了JRuby,Groovy.最后还是觉得Groovy比较容易上手。用Groovy有点当年写basic的感觉,不再有java那样那么多条条框框。开发的时候更多的是在用代码描述自己的执行逻辑,而不是为了实现某种逻辑功能去编写大量符合java"定式"的类。
Groovy给我的感觉就2个字"飘逸",在编码方面很多地方java工作量是非常繁琐而Groovy封装的相当成功,或许AOP的精华也就在此。
每个月我要对DB2数据库进行Runstatus操作,要备份语句,上传语句到目的机器,并执行。每个月如此,只是每个月要执行的语句会变化,因为表也在不断变化中。这部分工作很机械,以前就像过写一个什么东西自动化一把。可惜没做.... 刚好学了Groovy就用它实现吧
下面贴出Groovy程序 DB2Runstatus.groovy
短短60行的代码就实现了从备份到FTP再执行的任务,HOHO~ 执行的方式也很简单,再CLI模式下 groovy DB2Runstatus.groovy [表模式名] 假设我要执行ODS层的runstatus==> groovy DB2Runstatus.groovy ODS
这样在D:/数据库维护/Runstats/ 目录下 会生成一个当前日期的文件夹,文件夹下会生成一个 ODS.sql 文件和 ODS.ftp文件 分别上 执行语句和FTP语句再执行完之后就会自动 telnet 到目标机器 用Nohup挂载 执行( 这里我登陆的是 AIX 所以用nohup 其他的系统自己参考)
然后把完整的调用方式 写成一个bat文件 run.bat
再配置到windows执行计划里面去 就OK了
执行groovy的环境必须 JDK >=1.5 并且配置好 环境变量%GRROVY_HOME%
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", "${user}", "${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 其他的系统自己参考)
然后把完整的调用方式 写成一个bat文件 run.bat
groovy DB2Runstatus.groovy ODS groovy DB2Runstatus.groovy DW groovy DB2Runstatus.groovy WI
再配置到windows执行计划里面去 就OK了
执行groovy的环境必须 JDK >=1.5 并且配置好 环境变量%GRROVY_HOME%
相关文章推荐
- 利用windows计划任务实现定时运行ASP文件代码
- C#动态执行函数:利用反射实现
- webapi + windows计划 + mshta 实现定时执行任务
- C#利用反射实现(js)Eval,asp(Execute)功能 动态执行类库中的函数
- 利用windows任务计划实现oracle的定期备份
- 利用开源的TaskScheduler组件实现监控和管理windows计划任务
- 利用Groovy实现动态加载Bean
- 利用Windows的命令行工具tasklist和findstr,start结合计划任务实现一种进程监控的方案
- windows 定时计划实现定时执行PHP
- C#动态执行类库中的函数:利用反射实现(js)Eval,asp(Execute)功能
- windows 下利用 winrar 和 计划任务实现文件的自动备份
- 利用windows任务计划实现oracle的定期备份
- python脚本利用windows计划定时执行
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- 利用windows计划任务实现定时运行ASP文件代码
- 利用动态代理+注解 实现子线程中执行方法
- 转:Windows任务计划实现自动执行ArcGIS相关功能
- Windows中利用计划任务实现自动备份文件
- windows下的计划任务程序执行PHP文件 PHP定时功能的实现