`
touchmm
  • 浏览: 1044176 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

飘逸的Groovy,利用Groovy+windows执行计划 实现动态RunstatusDb2数据库

阅读更多

端午三天假,学习了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", 

                         "${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%

分享到:
评论

相关推荐

    Java调用Groovy,实时动态加载数据库groovy脚本

    2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的ClassLoader,能解析Groovy源码并生成字节码。 3. 加载并执行Groovy脚本:通过GroovyClassLoader的`parseClass()`方法...

    Groovy+Tapestry5+Spring2.5+Hibernate3.2实现CRUD

    标题 "Groovy+Tapestry5+Spring2.5+Hibernate3.2实现CRUD" 涉及到的是一个使用几种技术栈构建Web应用程序的示例。这个项目结合了Groovy、Tapestry 5、Spring 2.5和Hibernate 3.2,旨在展示如何在实际开发中进行数据...

    groovy脚本实现对数据库的增删改查

    在“groovy脚本实现对数据库的增删改查”这个主题中,我们将深入探讨如何使用Groovy来执行常见的数据库操作。首先,我们需要连接到数据库。在Groovy中,我们可以利用JDBC(Java Database Connectivity)API来实现这...

    JUN SpringBoot API Service 是一个基于SpringBoot+Groovy+SQL动态生成API

    JUN SpringBoot API Service 是一个基于SpringBoot+Groovy+SQL动态生成API并动态发布,且发布后可动态执行groovy脚本及SQL脚本的API服务项目。提供在线执行动态程序脚热加载本及动态生成API并执行的功能。支持动态...

    Groovy DSL 动态规则(rule)执行引擎

    Groovy DSL动态规则执行引擎是一种基于Groovy语言的领域特定语言(Domain-Specific Language)来构建规则引擎的解决方案。这种引擎特别适用于流程控制、风险管理系统以及动态接口配置,特别是那些需要快速迭代和低...

    groovy+maven+spring

    在IT行业中,构建高效、灵活的应用常常涉及到多种技术的整合,比如"groovy+maven+spring"这样的组合。这个组合提供了强大的动态脚本语言Groovy、项目管理工具Maven以及广泛应用的Spring框架的集成,使得开发过程更加...

    Groovy DSL 动态规则(rule)执行引擎流程引擎特色风控系统规则引擎动态接口配置(低代码)

    自创Groovy DSL 动态规则(rule)执行引擎, 流程引擎. 特色 风控系统, 规则引擎, 动态接口配置(低代码)Groovy DSL 动态规则(rule)执行引擎。DSL(特定领域语言): 开发 和 业务 共识的语言。方便业务表达需求, 方便开发...

    JVM 动态执行Groovy脚本的方法

    本文将详细讲解如何使用JVM动态执行Groovy脚本的方法,主要包括利用JShell执行代码、调试模式下动态执行代码以及利用javax.script包执行Groovy脚本。以下是对各知识点的详细说明。 1. 利用JShell执行代码 Java 9 ...

    groovy+in+action

    - **数据库编程**:Groovy提供了与数据库交互的强大工具,包括SQL查询、ORM框架集成等。 - **XML处理**:Groovy内置了强大的XML处理功能,支持XPath查询、DOM操作等。 - **单元测试**:Groovy支持多种单元测试...

    groovy集成springboot动态执行

    本文将深入探讨如何在Spring Boot项目中集成Groovy,并通过两种方式实现动态执行:通过Groovy文件执行脚本和通过数据库动态执行。 首先,让我们了解Groovy如何与Spring Boot结合。Spring Boot提供了对Groovy的支持...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Groovy是另一种基于JVM的动态编程语言,它的语法简洁,易于阅读和编写。Groovy与Java高度互操作,可以在现有的Java项目中无缝集成。Groovy的优点在于它支持闭包和元编程,使得代码更加简洁和可扩展。 Stackless ...

    java动态代码执行

    Java动态代码执行是一种在...通过学习和掌握Groovy框架,开发者可以充分利用这些特性,提升应用程序的动态性和灵活性。在实际项目中,务必注意安全问题,因为动态代码执行也可能带来潜在的代码注入风险,需要谨慎处理。

    通过groovy自定义函数实现提取明细表字段至主表字段.rar

    2. **数据访问**:Groovy可以方便地与数据库进行交互,通过JDBC API或者ORM框架(如Hibernate)来查询明细表和主表。这里可能涉及到SQL查询语句的编写,以及结果集的处理。 3. **字段映射**:为了将明细表中的字段...

    基于groovy实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    在IT行业中,动态编程是一种非常重要的能力,尤其是在大型企业级应用和微服务架构中。...在实际项目中,我们可以利用这种技术实现动态配置、自动化测试、数据处理等场景,充分发挥Groovy和Dubbo的优势。

    Groovy 2.3.6 windows

    Groovy是一种基于Java平台的动态编程语言,它在设计时考虑了简洁性和可读性,使得开发者能够以更少的代码实现更多的功能。Groovy 2.3.6是这个语言的一个特定版本,专为Windows操作系统设计。在这个版本中,Groovy...

    Groovy+quick+start.pdf

    ### Groovy 快速入门知识点解析 #### 一、集合 **1.1 List** - **定义**: 在 Groovy 中,`List` 是一种非常常用的数据结构,它类似于 Java 的 `List`,能够存储一系列的对象,并且保持它们的顺序。 - **示例代码*...

    groovy脚本执行工具.zip

    2. 动态类型:Groovy是动态类型的,这意味着变量的类型在运行时确定,减少了编码的繁琐。 3. 缩进和空格敏感:Groovy的语法更接近Python,使用缩进来表示代码块,使得代码看起来更加整洁。 4. GString:Groovy的字符...

    groovy-2.3.6-installer

    Groovy是一种动态、开源的编程语言,它是Java平台上的一个JVM(Java Virtual Machine)语言。Groovy结合了Python、Ruby和Perl等脚本语言的简洁性和灵活性,并且完全兼容Java,可以无缝地与Java代码集成。在"groovy-...

Global site tag (gtag.js) - Google Analytics