groovy 热部署

本文介绍了Groovy的热部署实现,包括引入依赖、使用Groovy类加载器、从Java调用Groovy脚本、编写Groovy文件以及解决打包时Groovy文件被过滤的问题。
摘要由CSDN通过智能技术生成

groovy 可以实现热部署。下面对groovy的初次使用进行简单记录。

 

1.引入groovy依赖包

<dependency>
   <groupId>org.codehaus.groovy</groupId>
   <artifactId>groovy-all</artifactId>
   <version>2.4.3</version>
</dependency>

2.groovy类加载器,在调用groovy前,要进行groovy加载。如果groovy文件被修改,或者替换,需要重新加载groovyClassKiader,否则新的groovy内容不会生效

private static GroovyClassLoader groovyClassLoader = null;

public static void initGroovy() {
    CompilerConfiguration compilerConfig = new CompilerConfiguration();
    compilerConfig.setSourceEncoding("UTF-8");
    groovyClassLoader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader(), compilerConfig);
}

3.从java类中调用groovy, File指向.groovy文件

 

public List<PlatformMatch>  test(Map<String,Object>param, String exceptOrgs ){
    initGroovy();//每调用一次该方法就重新加载一遍也不太好,可以开放个接口出去,当groovy有修改的时候再调用
    List<PlatformMatch> list = new ArrayList<PlatformMatch>();

    //groovy 的定制化查询,
    File groovyFile = new File(NativePath.get("groovy")+"/"+param.get("orgId")+".groovy");
    if (!groovyFile.exists()) {
        groovyFile = new File(NativePath.get("groovy")+"/Common"+".groovy");
    }

    String result = "";
    try {
        // 获得GroovyShell_2加载后的class
        Class<?> groovyClass = groovyClassLoader.parseClass(groovyFile);
        // 获得GroovyShell_2的实例
        GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
        // 反射调用sayHello方法得到返回值

        param.put("platFormMapper",platFormMapper);
        param.put("exceptOrg",ToolString.conventString(exceptOrgs.toString()));
        list = (List<PlatformMatch>)groovyObject.invokeMethod("customize",param);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return list;
}

 

 

4编写groovy文件里的内容。创建来.groovy文件,编辑方式与java一样,所有的java基础类都可以在groovy文件中使用。groovy文件可以放在任何地方。只要文件路径能找到就可以,当然要兼顾将来能够在服务运行中也能修改或者替换groovy文件,所以将groovy文件放到配置文件的路径下了。而不是放在类路径下。

 

public List<PlatformMatch>  customizePlatform (Map<String,Object>param, String exceptOrgs ){
    initGroovy();
List<PlatformMatch> list = new ArrayList<PlatformMatch>();
//groovy 的定制化查询
File groovyFile = new File(NativePath.get("groovy")+"/"+param.get("orgId")+".groovy");
    if (!groovyFile.exists()) {
        groovyFile = new File(NativePath.get("groovy")+"/Common"+".groovy");
}

    String result = "";
    try {
        // 获得GroovyShell_2加载后的class
Class<?> groovyClass = groovyClassLoader.parseClass(groovyFile);
// 获得GroovyShell_2的实例
GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
// 反射调用sayHello方法得到返回值
param.put("platFormMapper",platFormMapper);
param.put("exceptOrg",ToolString.conventString(exceptOrgs.toString()));
list = (List<PlatformMatch>)groovyObject.invokeMethod("customize",param);
} catch (Exception e) {
        e.printStackTrace();
        return null;
}
    return list;
}

 

 5.groovy 文件在打包发布时会被maven过滤掉。解决方法

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-antrun-plugin</artifactId>
   <version>1.7</version>
   <executions>
      <execution>
         <id>prepare-groovy-copy</id>
         <phase>generate-resources</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <copy todir="target/groovy"
overwrite="true">
                  <fileset dir="src/main/resources/groovy">
                     <include name="*.groovy" />
                  </fileset>
               </copy>
            </tasks>
         </configuration>
      </execution>
   </executions>
</plugin>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值