3

我正在尝试运行可调度的工作我从未在销售人员中使用过可调度的工作

这是我的代码

global class scheduledMerge implements Schedulable{
   global void execute(SchedulableContext SC) {
      System.debug('Hello World'); 
   }
}

          created a cusom controller
public class schedulableMerge{

public schedulableMerge(){

}
public PageReference Hello(){
scheduledMerge m = new scheduledMerge();
        String sch = '0 10 * * 1-12 ? *';
        system.schedule('Merge Job', sch, m);
        return null;
}

}

和visualforce页面是

<apex:page controller="schedulableMerge">
  <!-- Begin Default Content REMOVE THIS -->
    <h1>Congratulations</h1>
  This is your new Page
  <!-- End Default Content REMOVE THIS -->
  <apex:form >
  <apex:commandButton value="Press it" action="{! Hello}" />
</apex:form>

</apex:page>

当我按下按钮按下它时,所有可调度作业中有一个作业,但只有一个选项删除它。没有管理选项。我认为这项工作应该每 10 分钟运行一次。我从 Monitoring>Debug Log 中看到了调试日志,它没有显示任何日志。你能告诉每分钟运行作业的表达式是什么以及在哪里查看调试日志吗?我的目标是看到可安排的工作

4

3 回答 3

4

好消息 - 您不需要 visualforce 页面和控制器。坏消息 - 您不能以 1 分钟的间隔安排作业。我认为最少 5 分钟(但我不确定,你必须尝试一下)。

如何按需运行(一次)?从开发人员控制台或 Eclipse 的“执行匿名”块。

确保将您的用户添加到调试日志中,并简单地强制运行execute您必须作为接口的一部分实现的方法:

scheduledMerge sm = new scheduledMerge();
sm.execute(null);

在您对一次运行成功完成感到满意后,尝试使用 cron 表达式。如果您对每天一次的频率感到满意 - 您根本不需要这些表达式,请转到设置 -> 开发 -> 类,然后单击 [Schedule Apex]。仅当您一天需要多次运行时才使用代码来安排课程。

最后但同样重要的是 - 转到设置并在搜索中键入“Apex 工作”。您应该看到最近执行的所有异步任务的信息(计划的作业、批处理、@future方法等)

于 2013-02-17T18:21:13.890 回答
2

你能告诉每分钟运行作业的表达式是什么以及在哪里查看调试日志吗?

你不能每分钟都运行它。最少是一小时 - Apex 调度程序。有一个哈克 - 尽可能频繁地运行工作以启动大量工作。

您可以尝试在当前运行的作业中安排新作业(如果可能的话)以运行每个 Datetime.now().minute() + 1。这个想法刚刚出现在我的脑海中。我没试过。所以同一堂课将在一分钟后开始。但是不要忘记杀死这个类中的当前工作,这样你就不会创建大量的预定工作并用完调控器限制。

于 2013-02-18T10:14:13.763 回答
0

我已经为 Scheduled Apex 执行了类似的操作,以运行 15、30、45、60 分钟(即每 15 分钟)

缺点是,我们需要创建 4 个不同的 Scheduled Apex 作业才能执行。

System.schedule('Every 0th min', '0 0 * * * ?', new scheduledMerge());
System.schedule('Every 15th min', '0 15 * * * ?', new scheduledMerge());
System.schedule('Every 30th min', '0 30 * * * ?', new scheduledMerge());
System.schedule('Every 45th min', '0 45 * * * ?', new scheduledMerge());
于 2013-10-04T04:16:07.413 回答