0

我需要从 DataBase 加载一堆 groovy 脚本,如下所示:

List<ScriptDAO> scriptList = dataBaseRepository.findAll();
GroovyClassLoader groovyClassLoader = new 
GroovyClassLoader(this.getClass().getClassLoader());
for (ScriptDAO script : CollectionUtils.emptyIfNull(scriptList)) {
     groovyClassLoader.parseClass(script.getContent); 
}

当调用 parseClass 方法时,会引发此异常:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script_30b09946e4afa374dc45b9929ce7d050.groovy: 3: unable to resolve class com.xxx.groovy.model.RuleDataB
 

我看到了这个问题:GroovyClassLoader and imports。我知道这个错误是由RuleDataB未加载引起的。

脚本是这样的:

package com.xxx.groovy.business

import com.google.common.collect.Lists
import com.xxx.groovy.model.RuleDataB
import org.apache.commons.collections4.CollectionUtils


class RuleDataA {

    /**
     * getData
     */
    static List<RuleDataB> getData(List<String> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return Lists.newArrayList()
        }
        return RemoteXXXService.getRuleDataBByIds(ids)
    }
}

令我困惑的是如何使用该addClasspath()方法。我的脚本是从 BD 加载的,我应该转换StringFile吗?

我还需要reload通过更新这个 groovy 类ScriptDAO

4

0 回答 0