You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lucidworks自定义Java连接器获取上次任务运行时间技术问询

在自定义Java连接器中获取上次任务运行时间的方案

好问题!在构建Fusion自定义Java连接器时,除了你已经尝试的History API调用,还有几种更原生、更高效的方式来获取或存储上次任务的运行时间,我来逐一说明:

1. 利用连接器内置的状态存储机制

Fusion的Connector SDK提供了内置的状态管理能力,你可以直接通过ConnectorContext对象来存储和读取上次任务的运行时间。这种方式不需要额外调用外部API,完全在连接器内部完成,是最推荐的方案。

实现示例:

import java.time.Instant;
import com.lucidworks.fusion.connector.api.ConnectorContext;

// 当任务成功运行后,存储当前启动时间
public void onTaskSuccess(ConnectorContext context) {
    Instant lastRunStart = Instant.now();
    // 将时间序列化为字符串存储
    context.setState(lastRunStart.toString());
}

// 下次任务启动时,读取存储的上次运行时间
public void onTaskStart(ConnectorContext context) {
    String storedState = context.getState();
    if (storedState != null) {
        Instant lastRunStart = Instant.parse(storedState);
        // 在这里基于上次运行时间执行你的业务逻辑,比如增量同步
        System.out.println("上次任务启动时间:" + lastRunStart);
    } else {
        // 首次运行的处理逻辑
        System.out.println("首次执行任务");
    }
}

2. 通过Job Context直接获取任务历史

如果你的连接器是基于Fusion的Job框架开发的,可以通过JobContext直接获取任务的历史执行记录,包括上次成功运行的时间。这种方式不需要手动存储状态,直接从Fusion的任务历史服务中读取。

实现示例:

import com.lucidworks.fusion.job.api.JobContext;
import com.lucidworks.fusion.job.api.JobExecution;
import com.lucidworks.fusion.job.api.JobStatus;
import java.util.Comparator;
import java.util.Optional;

public void getLastRunTime(JobContext jobContext) {
    // 获取任务历史服务
    JobHistoryService historyService = jobContext.getJobHistoryService();
    // 获取上次成功执行的记录
    Optional<JobExecution> lastSuccessExecution = historyService.getLastSuccessfulExecution(jobContext.getJobId());
    
    lastSuccessExecution.ifPresent(execution -> {
        Instant lastRunStart = execution.getStartTime();
        System.out.println("上次成功任务启动时间:" + lastRunStart);
    });
}

3. 优化你当前的History API调用方式

你之前用curl调用History API的方式是可行的,但在Java代码中直接执行shell命令并不优雅,也存在安全和稳定性隐患。建议改用Fusion官方的Java客户端来调用API:

实现示例:

import com.lucidworks.fusion.client.FusionClient;
import com.lucidworks.fusion.client.FusionConfig;
import com.lucidworks.fusion.client.JobHistoryClient;
import com.lucidworks.fusion.job.api.JobExecution;
import com.lucidworks.fusion.job.api.JobStatus;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;

public void fetchLastRunTimeViaApi() {
    // 初始化Fusion客户端配置
    FusionConfig config = new FusionConfig.Builder()
        .setHost("fusion-host")
        .setPort(6764)
        .setUsername("user")
        .setPassword("pass")
        .build();
    
    try (FusionClient fusionClient = FusionClient.builder(config).build()) {
        JobHistoryClient historyClient = fusionClient.jobHistory();
        // 获取指定任务的历史记录
        List<JobExecution> jobHistory = historyClient.getJobHistory("datasource:movies-db");
        
        // 筛选出成功的记录,并找到最近的一条
        Optional<JobExecution> lastSuccess = jobHistory.stream()
            .filter(exec -> JobStatus.SUCCESS.equals(exec.getStatus()))
            .max(Comparator.comparing(JobExecution::getStartTime));
        
        lastSuccess.ifPresent(exec -> System.out.println("上次成功任务启动时间:" + exec.getStartTime()));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

方案对比总结

  • 优先选择内置状态存储:实现简单,性能最优,状态与任务直接绑定,适合只需要记录上次运行时间的场景。
  • 若需要完整的任务历史信息:选择Job Context获取历史,无需手动维护状态,直接从Fusion内部服务读取。
  • 必须使用API调用时:改用Java客户端调用,替代shell命令,提升代码的可维护性和安全性。

内容的提问来源于stack exchange,提问作者Sharavanakumaar Murugesan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:27:35