java Web 计时器

发布于 2022-09-01 07:31:11 字数 141 浏览 15 评论 0

我用jsp+servlet+mysql搞了一个众筹网站。当一个项目发起后,它有一个众筹时间,过了这个时间,项目就会从众筹状态转到另一个状态,当然,这需要在数据库中去操作。那么,如何设计一个计时器,在规定时间将触发,去更改相应的数据库表呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

孤寂小茶 2022-09-08 07:31:11

Spring+quartz 做定时任务

鲜血染红嫁衣 2022-09-08 07:31:11

楼上提到java.util.Timer

如果要使用,题主需要注意这种情况

public class BadCaseOfTimer {

    public static void main(String[] args) {
        Timer timer = new Timer();

        timer.schedule(new ThrowTask(),1);
        timer.schedule(new ThrowTask(),1);


    }

    static class ThrowTask extends TimerTask{

        @Override
        public void run() {
            System.out.println("runnin.."+System.currentTimeMillis());
            throw new RuntimeException();
        }
    }

}
黯然 2022-09-08 07:31:11

可以用java.util.Timer类的schedule方法

征棹 2022-09-08 07:31:11

有一个问题
时间到了以后,从一个状态转到另一个状态,除了改变这个字段的值以外,还有其它需要触发进行的操作么?
如果没有,很可能你不需要一个定时任务。

只需要在数据库中记录项目发起时间和期限,在需要判断状态的时候根据这两个值和当前时间,决定项目的状态。
类似于你的网站里记录用户的生日信息,在页面显示用户年龄。我想没有人会真的在数据库保存年龄然后每天刷新的。

染墨丶若流云 2022-09-08 07:31:11

不需要定时任务,只要设置开始结束时间,在所需的业务逻辑处判断即可:
1、筛选正在众筹的列表,sql添加条件:

startTime > now() AND endTime < now()

2、区分状态,在model中通过判断时间来转义称状态:

public class Item{
    private Date startTime;
    private Date endTime;
    
    public String getStatus(){
        if(startTime != null && endTime != null){
            Date now = new Date();
            if(now.after(startTime) && now.before(endTime)){
                return "正在众筹中";
            }else if(now.before(startTime)){
                return "还未开始";
            }else if(now.after(endTime)){
                return "已结束";
            }
        }
        return "";
    }
    ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文