我有一个从数据库表单元格获取值的Java方法。我们将其命名为jdbcTemplate.queryForObject()我想每2分钟运行一次这个方法,直到单元格的值变成true。是否可以使用CompletableFuture来实现这一点?
jdbcTemplate.queryForObject()
true
5rgfhyps1#
不,我不知道
CompletableFuture
complete
complete(...)
// Do this twice a minute until it succeeds. if (jdbcTemplate.queryForObject()) { future.complete(Boolean.TRUE); // stop repeating ... }
字符串我们的想法是只调用一次complete来传递一个结果...然后终止循环或任何重复查询的操作。但这并不是 * 使用 * CompletableFuture来执行重复查询。注意:您还应该考虑查询时间过长或因异常而失败等情况。
gk7wooem2#
你可以使用这个工作示例:
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); } } }, 0, 1000*2*60); System.out.println("checking database periodically ran"); future.thenAccept(o -> { System.out.println(o); timer.cancel(); }).join();
字符串
2条答案
按热度按时间5rgfhyps1#
不,我不知道
CompletableFuture
是一种将结果从一个线程传递到另一个线程的机制。它没有任何计算或重复的功能。CompletableFuture
只返回一个值。一旦“完成”,该值就不能更改。您可以使用不同的值多次调用complete
,但根据javadoc,它们将被忽略。当然,您可以编写一些代码来重复查询数据库,并且只在数据库单元为true时调用
complete(...)
。举例来说:字符串
我们的想法是只调用一次
complete
来传递一个结果...然后终止循环或任何重复查询的操作。但这并不是 * 使用 *
CompletableFuture
来执行重复查询。注意:您还应该考虑查询时间过长或因异常而失败等情况。
gk7wooem2#
你可以使用这个工作示例:
字符串