groovy 热部署 博客分类: groovy groovy
程序员文章站
2024-03-23 09:22:58
...
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>
上一篇: db2产生uuid 博客分类: db2 db2uuid
下一篇: 7.集合主讲
推荐阅读
-
groovy 热部署 博客分类: groovy groovy
-
用Eclipse在Web项目引用Java项目时实现热部署 博客分类: 技术话题 WebJavaEclipseTomcatJSP
-
jboss5.0热部署的问题 博客分类: 我的文章 JBossSeamXML
-
【Groovy文档翻译】有些事情你可以做,但最好不要做 博客分类: Java-Groovy/Grails GroovyJava
-
jboss5.0热部署的问题 博客分类: 我的文章 JBossSeamXML
-
Grails 从1.2.x 到1.3.x的改进 博客分类: Java-Groovy/Grails GrailsGroovyTomcatJVMCache
-
【Groovy文档翻译】有些事情你可以做,但最好不要做 博客分类: Java-Groovy/Grails GroovyJava
-
grails 简单应用小结 博客分类: groovy/grails GrailsGroovyJavaRailsSpring
-
Groovy on Rails 0.1发布 博客分类: 杂七杂八 GroovyRailsGrailsRubyBean
-
Grails命令备忘录 博客分类: GROOVY GrailsDojoquartzGroovySwing