Mysql 在Netbeans中自动创建计时器

Mysql 在Netbeans中自动创建计时器,mysql,netbeans,timer,Mysql,Netbeans,Timer,我正在创建一个从MySQL数据库获取信息的学校web应用程序。我希望后端定期删除数据库中已过期的带有时间戳的条目 根据我的研究,我创建了一个TimerSessionBean,其中每小时都有一个时间表注释,用于从数据库中删除条目。为了测试起见,现在我只是想让bean每5分钟打印一次。这就是我到目前为止所做的: import javax.ejb.Schedule; import javax.ejb.Stateless; import java.util.Date; @Stateless publi

我正在创建一个从MySQL数据库获取信息的学校web应用程序。我希望后端定期删除数据库中已过期的带有时间戳的条目

根据我的研究,我创建了一个TimerSessionBean,其中每小时都有一个时间表注释,用于从数据库中删除条目。为了测试起见,现在我只是想让bean每5分钟打印一次。这就是我到目前为止所做的:

import javax.ejb.Schedule;
import javax.ejb.Stateless;
import java.util.Date;

@Stateless
public class TimerSessionBean {

    @Schedule(minute = "*/5")
    public void PrintTime() {
        System.out.println("Current: " + new Date());
    }
}

但是,部署应用程序时不会发生任何事情。仅仅创建TimerSessionBean并包含日程注释还不够吗?

TimerSessionBean是一个单例会话bean,它展示了如何设置自动计时器和编程计时器。 在下面的TimerSessionBean源代码列表中,setTimer和@Timeout方法用于设置编程计时器。 创建bean时,容器将注入TimerService实例。因为它是一个业务方法,所以setTimer向本地公开,没有TimerSessionBean的接口视图,客户端可以调用它

在本例中,客户端以30000毫秒的时间间隔调用setTimer。 setTimer方法通过调用TimerService的createTimer方法来创建一个新的计时器。 现在已经设置了计时器,EJB容器将在计时器过期时调用TimerSessionBean的programmaticTimeout方法,大约30秒后


要查看输出,必须打开JAVA控制台

感谢您提供的信息,但是有没有一种方法可以让它在不让客户端调用计时器的情况下打印出来?我需要让后端定期从数据库中删除内容,而不管是否有人使用web应用程序。在netbeans之外执行此操作。使用管理控制台4848部署它,并在启动计算机时自动启动服务器。我明白了,因此计时器无法自动启动。但是你的自动超时方法呢?我的理解是,如果您给出了日程注释,它应该在您部署项目时立即启动计时器。
package timersession.ejb;

import java.util.Date;
import javax.annotation.Resource;
import javax.ejb.Schedule;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;

@Singleton
public class TimerSessionBean {
    @Resource
    TimerService timerService;

    private Date lastProgrammaticTimeout;
    private Date lastAutomaticTimeout;


    public void setTimer(long intervalDuration) {
        System.out.println("Setting a programmatic timeout for "
                + intervalDuration + " milliseconds from now.");
        Timer timer = timerService.createTimer(intervalDuration, 
                "Created new programmatic timer");
    }

    @Timeout
    public void programmaticTimeout(Timer timer) {
        this.setLastProgrammaticTimeout(new Date());
        System.out.println("Programmatic timeout occurred.");
    }

    @Schedule(minute="*/5", hour="*")
    public void automaticTimeout() {
        this.setLastAutomaticTimeout(new Date());
        System.out.println("Automatic timeout occured");
    }

    public void setLastProgrammaticTimeout(Date lastTimeout) {
    this.lastProgrammaticTimeout = lastTimeout;
    }

    public void setLastAutomaticTimeout(Date lastAutomaticTimeout) {
    this.lastAutomaticTimeout = lastAutomaticTimeout;
    }
 [...]