使用 GroovyClassLoader 与 GroovyShell 的优缺点是什么
我需要从我的 Java 应用程序运行一些外部代码,这些代码将经常更新并且与应用程序的其余部分正交。由于我不会为每次代码更改重新部署整个应用程序(也出于其他原因),我们选择使用 groovy 将此代码存储在文件系统或数据库中。
从文档我知道我有两种方法来运行代码 - 使用 GroovyShell 或 GroovyClassLoader (eval 不适合这里)
每种方法的优缺点是什么?
I need to run some external code from my Java application that will be updated frequently and orthogonally to the rest of the application. As I do not to re-deploy the entire application for every code change (and for other reasons as well) we chose to use groovy for this code, and store it either on the file system or in the database.
From the documentation I understand I have two ways to run the code - Using the GroovyShell or the GroovyClassLoader (eval does not fit here)
What are the pros and cons of each method?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
GroovyShell 在底层使用 GroovyClassLoader。除非您需要仅由 GroovyClassLoader 提供的功能,否则请使用 GroovyShell。
GroovyShell uses GroovyClassLoader underneath. Use GroovyShell unless you need a feature that's only provided by GroovyClassLoader.
GroovyShell 使用默认的类加载器,直到您在自定义类路径的脚本中加载某些内容,然后它会切换到自定义的 GroovyClassLoader,这可能会导致加载某些 jdbc 驱动程序或 jndi 项等时出现问题...因此,如果您的默认类加载器已经具有它需要 和 ,并且如果您可以避免在 Java 代码中实例化新的 GroovyClassLoader 对象,那么使用简单的 GroovyShell 加载 shell 脚本将使用默认的类加载器,这样您会更好。
希望我理解你的问题。
GroovyShell uses the default classloader until you load something in a script that customizes the classpath, then it switches to a custom GroovyClassLoader, which can cause problems loading some jdbc drivers or jndi items, etc... So, if your default classloader already has the classpath it needs and , and if you can avoid instantiating a new GroovyClassLoader object in your Java code, then loading a shell script with a simple GroovyShell will use the default classloader and you'll be better off for it.
Hope I understood your question.