Spring Data MongoDB通过Java调用js脚本执行

/ Spring Data MongoDB / 没有评论 / 43浏览

介绍Spring Data MongoDB如何通过Java程序调用js脚本。

使用场景

主要做一些数据清理之类的任务,但是用Java写起来太蛋疼,我们通过js脚本写,然后Java程序调用。

快速开始

编写脚本

// args为参数
function (args) {
    // do somethings

    // return
    return {result: 'ok'}
}

注意:其中args为参数,可以不写;返回值也可省略。

执行脚本

@Component
public class Script {

    private static final Logger LOG = LoggerFactory.getLogger(Script.class);

    @Autowired
    private MongoTemplate mongoTemplate;

    // 脚本
    private String text;

    /**
     * bean初始化时就加载脚本,这样程序只需要读取一次。
     */
    @PostConstruct
    public void setup() {
        ClassPathResource resource = new ClassPathResource("xxx.js");
        try {
            byte[] bytes = FileCopyUtils.copyToByteArray(resource.getInputStream());
            text = new String(bytes);
        } catch (IOException e) {
            LOG.error("读取xxx.js失败");
        }
    }

    /**
     * 具体的执行方法
     *
     * @return 脚本执行返回值
     */
    public Object execute() {
        if (StringUtils.isEmpty(text)) {
            throw new ScriptException(ScriptExceptionErrCode.SCRIPT_EMPTY_ERROR);
        }
        // 核心代码
        ExecutableMongoScript script = new ExecutableMongoScript(text);
        return mongoTemplate.scriptOps().execute(script);
    }
}

核心代码只有两行:

ExecutableMongoScript script = new ExecutableMongoScript(text);
Object result = mongoTemplate.scriptOps().execute(script);

参考文档