groovy 热部署

阅读更多

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

 

1.引入groovy依赖包


   org.codehaus.groovy
   groovy-all
   2.4.3

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

    //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)groovyObject.invokeMethod("customize",param);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return list;
}

 

 

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

 

public List  customizePlatform (Map,Object>param, String exceptOrgs ){
    initGroovy();
List list = new ArrayList();
//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)groovyObject.invokeMethod("customize",param);
} catch (Exception e) {
        e.printStackTrace();
        return null;
}
    return list;
}

 

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


   org.apache.maven.plugins
   maven-antrun-plugin
   1.7
   
      
         prepare-groovy-copy
         generate-resources
         
            run
         
         
            
               todir="target/groovy"
overwrite="true">
                  dir="src/main/resources/groovy">
                     name="*.groovy" />
                  
               
            
         
      
   

 

你可能感兴趣的:(groovy)