问题描述
我有一个从数据库表单元格中获取值的 Java 方法。
让我们将其命名为 jdbcTemplate.queryForObject()
我想每 2 分钟运行一次此方法,直到单元格的值变为 true
。
是否可以使用 CompletableFuture 实现这一点?
解决方法
没有
-
CompletableFuture
是一种将结果从一个线程传递到另一个线程的机制。它没有任何计算事物或重复事物的功能。 -
A
CompletableFuture
只返回一个值。一旦“完成”,该值将无法更改。您可以使用不同的值多次调用complete
,但它们将根据 javadoc 被忽略。
当然,您可以编写一些重复查询数据库的代码,并且仅在数据库单元格变为真时才调用 complete(...)
。但这不是使用 CompletableFuture
进行重复查询。
你可以使用这个工作示例:
CompletableFuture<Object> future = new CompletableFuture<>();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
Object o = "jdbcTemplate.queryForObject()";
if (o != null) {
future.complete(o);
}
} catch (Exception ex) {
future.completeExceptionally(ex);
}
}
},1000*2*60);
System.out.println("checking database periodically ran");
future.thenAccept(o -> {
System.out.println(o);
timer.cancel();
}).join();