gpt4 book ai didi

java - 如何在一段时间后调用方法

转载 作者:行者123 更新时间:2023-11-29 01:39:44 26 4
gpt4 key购买 nike

我的本​​地主机上运行着一个 MySQL 数据库。对于这个数据库,我有 JDBC 连接。通过 RESTful WebService,软件代理将结果放入该数据库。我在 Java 中实现了一个垃圾收集器,并希望在一段时间后执行该垃圾收集器。我的目标是表格中的条目不太多。

垃圾收集器如下所示:

public void collectGarbageResults() {
ArrayList<Integer> ids = new ArrayList<Integer>();
ResultSet rs = this.execQuery("SELECT * FROM results");
try {
while (rs.next()) {
if ( (System.currentTimeMillis()) - (Timestamp.valueOf(rs.getString("tmstmp")).getTime()) > Long.parseLong(appconfigs.get("resultstableactuality")) ) {
ids.add(rs.getInt("id"));
}
}

for (Integer i : ids) {
this.deleteResultsWhereId(i);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}

我调用的方法如下所示:

private void deleteResultsWhereId(int id) {
retint = this.updateQuery("DELETE FROM results WHERE id=" + id + ";");
}

我在 Eclipse 的动态 Web 项目中使用 JSF,这些方法是在托管 bean 中实现的。我将把时间间隔存储在我用于我的应用程序配置的 XML 文件中。在变量 appconfigs 上,我调用方法“get”并请求包含我的间隔的节点。

现在我的问题:

如何在我的 WebApp 中的某个时间段后调用垃圾收集器的方法?

如果您有任何问题,请随时发表评论。

My Solution :

@WebListener
public class BackgroundJobManager implements ServletContextListener{

private ScheduledExecutorService scheduler;

@Override
public void contextInitialized(ServletContextEvent event) {
long delayToStart = 0;
long numberOfUnits = 60;
TimeUnit tu = TimeUnit.SECONDS;
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new ExecuteGarbageCollector(), delayToStart, numberOfUnits, tu);
}

@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}

}

我调用的类实现 Runnable 如下:

public class ExecuteGarbageCollector implements Runnable{

@Override
public void run() {
DAO dao = new DAO();
dao.collectGarbageResults();
}

}

最佳答案

你可以使用 ScheduledExecutorServiceQuartz

Quartz 有很多设施,但是If you choose ScheduledExecutorService you don't have to add any new dependencies to your project.因为你只是想要这个计划任务,所以很简单。

 ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(...);

查看有关两者的一些评论:Quartz vs. ScheduledExecutorService in Java web application

关于java - 如何在一段时间后调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com