Java 我是否可以使用CompletableFuture重复该方法,直到值为true
我有一个Java方法,它从数据库表单元格中获取一个值。 让我们把它命名为Java 我是否可以使用CompletableFuture重复该方法,直到值为true,java,spring-boot,java-8,completable-future,Java,Spring Boot,Java 8,Completable Future,我有一个Java方法,它从数据库表单元格中获取一个值。 让我们把它命名为jdbcTemplate.queryForObject() 我希望每2分钟运行一次此方法,直到单元格的值变为true 是否可以使用CompletableFuture实现这一点?否 CompletableFuture是一种将结果从一个线程传递到另一个线程的机制。它没有任何计算或重复事物的功能 CompletableFuture只返回一个值。一旦“完成”,该值就不能更改。您可以使用不同的值多次调用complete,但根据不同的
jdbcTemplate.queryForObject()
我希望每2分钟运行一次此方法,直到单元格的值变为true
是否可以使用CompletableFuture实现这一点?否
CompletableFuture
是一种将结果从一个线程传递到另一个线程的机制。它没有任何计算或重复事物的功能
CompletableFuture
只返回一个值。一旦“完成”,该值就不能更改。您可以使用不同的值多次调用complete
,但根据不同的参数,它们将被忽略
complete(…)
。但这并不是使用CompletableFuture
来重复查询。否
CompletableFuture
是一种将结果从一个线程传递到另一个线程的机制。它没有任何计算或重复事物的功能
CompletableFuture
只返回一个值。一旦“完成”,该值就不能更改。您可以使用不同的值多次调用complete
,但根据不同的参数,它们将被忽略
当然,您可以编写一些重复查询数据库的代码,并且仅在数据库单元格变为true时调用
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);
}
}
}, 0, 1000*2*60);
System.out.println("checking database periodically ran");
future.thenAccept(o -> {
System.out.println(o);
timer.cancel();
}).join();
CompletableFuture=newcompletablefuture();
定时器=新定时器();
timer.schedule(新TimerTask(){
@凌驾
公开募捐{
试一试{
Object o=“jdbcTemplate.queryForObject()”;
如果(o!=null){
未来。完成(o);
}
}捕获(例外情况除外){
未来。完全例外(ex);
}
}
}, 0, 1000*2*60);
System.out.println(“定期检查数据库运行”);
未来。然后接受(o->{
系统输出打印ln(o);
timer.cancel();
}).join();
您可以使用以下工作示例:
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();
CompletableFuture=newcompletablefuture();
定时器=新定时器();
timer.schedule(新TimerTask(){
@凌驾
公开募捐{
试一试{
Object o=“jdbcTemplate.queryForObject()”;
如果(o!=null){
未来。完成(o);
}
}捕获(例外情况除外){
未来。完全例外(ex);
}
}
}, 0, 1000*2*60);
System.out.println(“定期检查数据库运行”);
未来。然后接受(o->{
系统输出打印ln(o);
timer.cancel();
}).join();