程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Schedule Expression参数化EJB Scheduler大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用schedule Expression参数化EJB scheduler?

开发过程中遇到使用schedule Expression参数化EJB scheduler的问题如何解决?下面主要结合日常开发的经验,给出你关于使用schedule Expression参数化EJB scheduler的解决方法建议,希望对你解决使用schedule Expression参数化EJB scheduler有所启发或帮助;

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

@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
    }
}

解决方法

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

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

@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秒运行一次:@H_673_16@

@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
    }
}

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

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

EJB
3.x中@schedule方法的动态参数

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

任何帮助,将不胜感激。

大佬总结

以上是大佬教程为你收集整理的使用Schedule Expression参数化EJB Scheduler全部内容,希望文章能够帮你解决使用Schedule Expression参数化EJB Scheduler所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。