当前位置: 首页 > 面试题库 >

使用Schedule Expression参数化EJB Scheduler

龙毅
2023-03-14
问题内容

我正在使用EJB 3.1和jboss-eap-6.4,并且要为ejb调度程序的小时,分​​钟和秒设置一些动态参数,如下所示:

非参数代码-每5分钟的30秒运行一次:

@Singleton
@Startup
public class TriggerJob {
    @EJB
   //some db injections

    @PostConstruct
    public void onStartup() {
        try {
            preparation();
        } catch (CertificateVerificationException e) {
            e.printStackTrace();
        }
    }

    @Schedule(second = "30", minute = "*/5", hour = "*", persistent = false)
    public void preparation() {
    //my scheduled tasks
    }
}

上面的代码正确执行。

动态参数代码-应每5分钟30秒运行一次:

@Singleton
@Startup
public class TriggerJob {

    @EJB
    //some injections

    private boolean runningFlag = false;

    @Resource
    private TimerService timerService;

    public void setTimerService(TimerService timerService) {
        this.timerService = timerService;
    }

    @Timeout
    public void timerTimeout() {
        try {
            preparation();
        } catch (CertificateVerificationException e) {
            e.printStackTrace();
        }
    }

    @PostConstruct
    private void postCunstruct() {
        timerService.createCalendarTimer(createSchedule(),new TimerConfig("EJB timer service timeout at ",false));
    }

    private ScheduleExpression createSchedule() {
        ScheduleExpression expression = new ScheduleExpression();
        expression.hour("*")
                .minute("*/5")
                .second("30");
        return expression;
    }

    public void preparation(){
    // my scheduled tasks
    }
}

上面的代码执行不正确,通常每秒执行多次。

另外,我还阅读了其他一些对我没有帮助的问题:

EJB3.x中@Schedule方法的动态参数

使用计时器服务-Java EE 6教程

任何帮助,将不胜感激。


问题答案:

而是使用程序化调度,这是一个示例:

@Singleton
@Startup
public class TriggerJob{

    @EJB
    //some injections

    @Resource
    private TimerService timerService;

    @PostConstruct
    public void init() {
        createTimer();
        //the following code resolve my startup problem
        try {
        preparation();
        } catch (CertificateVerificationException e) {
            e.printStackTrace();
        }
    }

    @Timeout
    public void timerTimeout() {
        try {
        preparation();
        } catch (CertificateVerificationException e) {
        e.printStackTrace();
        }
    }

    private void createTimer() {
        ScheduleExpression scheduleExpression = new ScheduleExpression();
        scheduleExpression.second("30").minute("*/5").hour("*");
        TimerConfig timerConfig = new TimerConfig();
        timerConfig.setPersistent(false);
        timerService.createCalendarTimer(scheduleExpression, timerConfig);
        }

    public void preparation(){
        // my scheduled tasks
    }
}


 类似资料:
  • 我想让它在每天每小时的第5,15,25,35,45和55分钟运行。这似乎与这里的AWS调度事件文档一致http://docs.AWS.amazon.com/amazoncloudwatch/latest/Events/scheduledevents.html。 上面的文档允许用0到59之间的逗号分隔值表示分钟,并使用*通配符反映小时、月日(或周日)、月和年。 我尝试在Lambda控制台(创建函数并

  • 我正在尝试设置Cloudwatch计划事件,我的cron表达式似乎无效,我不知道为什么。 文档中的表达式示例: 另一个例子: 现在,我希望它每天在UTC时间下午18点运行,所以这似乎就是我想要的。 但我正在 为什么无效?

  • 除了星期二,我想在和UTC期间的每一分钟都调用我的lambda。我在cloud dwatch规则中编写了以下cron表达式,但我收到错误 参数SchduleExpression无效。 我用crontab交叉检查了表达式。古鲁也是。 我甚至试着做以下事情,因为如果它在星期二运行,我还可以。 他们都给了我错误。谁能帮帮我吗?

  • 我正在尝试设置Cloudwatch计划的事件,我的cron表达式似乎无效,但我不知道为什么。 我的cron表达式是: 我想每分钟运行一次cron,但每当我在serverless上部署函数时,都会出现以下错误 如果我做错了什么,请告诉我

  • 使用Robolectric的参数化测试 原文链接 : Parameterized testing with Robolectric 译文出自 : 开发技术前线 www.devtf.cn 译者 : Lollypo 校对者: Chaos 状态 : 校对完成 在目前的项目中我们使用Robolectric为Android应用程序编写单元测试,它一直都干的不错。最近我需要编写一个测试用例,通过每次使用不同的

  • 我知道我的问题很笼统,但我对人工智能领域还不熟悉。我用一些参数做了一个实验(几乎6个参数)。每一个都是独立的,我想找到输出函数最大或最小的最优解。然而,如果我想用传统的编程技术来实现,这将需要很多时间,因为我将使用六个嵌套循环。 我只是想知道用哪种人工智能技术来解决这个问题?遗传算法?神经网络?机器学习? 实际上,这个问题可能有不止一个评估函数。它将有一个功能,我们应该最小化它(成本)和另一个功能