Spring 使用新记录上的EventSource自动更新客户端

Spring 使用新记录上的EventSource自动更新客户端,spring,server-sent-events,reactor,Spring,Server Sent Events,Reactor,我有以下代码。我想要的结果是,当创建新记录时,客户机将自动更新新信息。相反,下面的代码只从findAll获取记录。如何更改代码以使客户端自动更新 @RestController 公共类控制器 { //... @GetMapping(path=“/comment/stream”,products=MediaType.TEXT\u EVENT\u stream\u VALUE) 公共交通评论() { 返回commentRepository.findAll() .publishOn(Schedule

我有以下代码。我想要的结果是,当创建新记录时,客户机将自动更新新信息。相反,下面的代码只从
findAll
获取记录。如何更改代码以使客户端自动更新

@RestController
公共类控制器
{
//... 
@GetMapping(path=“/comment/stream”,products=MediaType.TEXT\u EVENT\u stream\u VALUE)
公共交通评论()
{
返回commentRepository.findAll()
.publishOn(Schedulers.parallel())
.log()
.延迟要素(持续时间为百万(100));
}
}
要保存我使用的注释(工作正常):

@PostMapping(“/comment/save”)
@应答器
公共Mono保存(@RequestBody Comment)
{
返回this.commentRepository.save(comment);
}
与(工程罚款):

客户端javascript(似乎也可以正常工作):

函数loadComments(){
this.source=null;
this.start=函数(){
var commentTable=document.getElementById(“注释”);
this.source=neweventsource(“/comment/stream”);
this.source.addEventListener(“消息”,函数(事件){
//这些事件是JSON,因此需要解析和DOM篡改
var comment=JSON.parse(event.data);
var row=commentTable.getElementsByTagName(“tbody”)[0].insertRow(0);
var cell0=行插入单元格(0);
var cell1=行插入单元格(1);
var cell2=行插入单元格(2);
cell0.className=“作者风格”;
cell0.innerHTML=comment.author;
cell1.className=“text”;
cell1.innerHTML=comment.message;
cell2.className=“日期”;
cell2.innerHTML=comment.timestamp;
});
this.source.onerror=函数(){
这个。关闭();
};
};
this.stop=函数(){
this.source.close();
}
}
comment=新的loadComments();
/*
*注册用于启动和停止SSE控制器的回调。
*/
window.onload=函数(){
comment.start();
};
window.onbeforeunload=函数(){
comment.stop();
}
要查看完整代码,请执行以下操作:
我创建了一个解决方案:

@GetMapping(path=“/comment/stream”,products=MediaType.TEXT\u EVENT\u stream\u VALUE)
公共交通评论()
{
返回Flux.create(fluxSink->{
流量间隔(持续时间秒(1))
.map(s->{
this.commentRepository.findBytimestampTampGreaterThanOrderByTimestampdesc(lastChecked).take(5).doOnEach(新消费者(){
@凌驾
公共无效接受(信号){
next(commentSignal.get());
}
}).subscribe();
lastChecked=Calendar.getInstance().getTime();
lastChecked.setTime(lastChecked.getTime()-5000);
返回s;
})
.subscribe();
})
.publishOn(Schedulers.parallel())
.onBackpressureBuffer();
}
curl -X POST localhost:8080/comment/save -H 'Content-type:application/json' -d '{"author":"author","message":"Message","timestamp":"Timestamp"}'