java - 带有 WebClient 的 Cron 调度程序
问题描述
我正在使用弹簧靴。我正在尝试将数据从一个数据库发送到另一个。首先,我通过发出 get 请求从第一个数据库中获取数据并通过 Web 客户端应用 post 将数据发送到另一个数据库来做到这一点。有效!但是,当我尝试使用带有 @Scheduled 注释的 cron 调度程序来执行此操作时,它不会将数据发布到数据库中。即使该功能工作正常,因为我尝试通过该功能打印东西,但 WebClient 没有发布数据(也检查了数据,这很好)。
Cron 类是:
@Component
public class NodeCronScheduler {
@Autowired
GraphService graphService;
@Scheduled(cron = "*/10 * * * * *")
public void createAllNodesFiveSeconds()
{
graphService.saveAlltoGraph("Product");
}
}
saveAlltoGraph 函数从 Product 表中取出所有的元组,然后向图数据库的 api 发送 post 请求,从而从元组中生成节点。
这是功能:
public Mono<Statements> saveAlltoGraph(String label) {
JpaRepository currentRepository = repositoryService.getRepository(label);
List<Model> allModels = currentRepository.findAll();
Statements statements = statementService.createAllNodes(allModels, label);
//System.out.println(statements);
return webClientService.sendStatement(statements);
}
首先,标签“Product”用于获取与该表相关的 JpaRepository。然后我们在列表中获取该表的所有元组,并据此创建对象(我们可以使用序列化程序来获取 JSON)。
这是 sendStatement 函数:
public Mono<Statements> sendStatement(Statements statements){
System.out.println(statements);
return webClient.post().uri("http://localhost:7474/db/data/transaction/commit")
.body(Mono.just(statements), Statements.class).retrieve().bodyToMono(Statements.class);
}
当我们使用获取请求映射调用此 saveAlltoGraph 时,一切正常,但不使用调度程序。
解决方案
我尝试添加 .block() 和 .subscribe() 。事情开始与 cron 调度程序一起工作。
推荐阅读
- react-native - react native 中的导航,带有条件堆栈和身份验证
- angular - 行为主题的订阅不适用于多重语句
- yii2 - 如何访问 Yii2 翻译数组?
- python - 如何通过 python 脚本或其他任何东西(没有任何 DNS 和在线服务器的帮助)使网站可以在全球范围内访问?
- javascript - React Native - 动画仅在 Android 上的 Toggle Inspect 后有效
- angular - 角 9 | Facebook分享按钮不显示图像
- python - tkinter.TclError:按钮包装类不存在图像“pyimage”
- javascript - 在加载完成之前检测窗口关闭
- javascript - 在javascript中将函数名称更改为1个字母的过程的名称是什么?
- elixir - 如何在列表中搜索,如果没有找到,请选择最近的最高值长生不老药