java 我可以使用CompletableFuture重复方法直到value为true吗

wr98u20j  于 2023-08-01  发布在  Java
关注(0)|答案(2)|浏览(112)

我有一个从数据库表单元格获取值的Java方法。我们将其命名为jdbcTemplate.queryForObject()
我想每2分钟运行一次这个方法,直到单元格的值变成true
是否可以使用CompletableFuture来实现这一点?

5rgfhyps

5rgfhyps1#

不,我不知道

  1. CompletableFuture是一种将结果从一个线程传递到另一个线程的机制。它没有任何计算或重复的功能。
  2. CompletableFuture只返回一个值。一旦“完成”,该值就不能更改。您可以使用不同的值多次调用complete,但根据javadoc,它们将被忽略。
    当然,您可以编写一些代码来重复查询数据库,并且只在数据库单元为true时调用complete(...)。举例来说:
// Do this twice a minute until it succeeds.
if (jdbcTemplate.queryForObject()) {
    future.complete(Boolean.TRUE);
    // stop repeating ...
}

字符串
我们的想法是只调用一次complete来传递一个结果...然后终止循环或任何重复查询的操作。
但这并不是 * 使用 * CompletableFuture来执行重复查询。
注意:您还应该考虑查询时间过长或因异常而失败等情况。

gk7wooem

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();

字符串

相关问题