我可以使用 CompletableFuture 重复方法直到值为 true

问题描述

我有一个数据库表单元格中获取值的 Java 方法。 让我们将其命名为 jdbcTemplate.queryForObject()

我想每 2 分钟运行一次此方法,直到单元格的值变为 true

是否可以使用 CompletableFuture 实现这一点?

解决方法

没有

  1. CompletableFuture 是一种将结果从一个线程传递到另一个线程的机制。它没有任何计算事物或重复事物的功能。

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