- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下代码。我认为通过发布我可以创建一个热流,但是每个连接上的 uniqueId 都不同。我希望 create 方法执行一次,然后作为任意数量的订阅者的热流运行。
private Date lastChecked = Calendar.getInstance().getTime();
@GetMapping(path = "/news/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Object> comments(@RequestParam(required=false) String date) throws ParseException {
if(date != null) {
lastChecked=new SimpleDateFormat("dd-MM-yyyy").parse(date);
}
return Flux.create(fluxSink -> {
String uniqueID = UUID.randomUUID().toString();
Flux.interval(Duration.ofSeconds(1))
.map(s -> {
System.out.println(uniqueID);
this.newsRepository.findByTimestampGreaterThanOrderByTimestampDesc(lastChecked).take(5).doOnEach(new Consumer<Signal<News>>() {
@Override
public void accept(Signal<News> commentSignal) {
fluxSink.next(commentSignal.get());
}
}).subscribe();
lastChecked = Calendar.getInstance().getTime();
lastChecked.setTime(lastChecked.getTime() - 2000);
return s;
})
.subscribe();
})
.publishOn(Schedulers.parallel())
.onBackpressureBuffer()
.publish() //executing publish here
.autoConnect();
}
最佳答案
我找到了解决方案,使用 PostConstruct 注释仅创建一次 ConnectableFlux:
private Date lastChecked = Calendar.getInstance().getTime();
private ConnectableFlux<Object> flux;
@PostConstruct
public void load()
{
System.out.println("Loaded");
this.flux = Flux.create(fluxSink -> {
String uniqueID = UUID.randomUUID().toString();
Flux.interval(Duration.ofSeconds(1))
.map(s -> {
System.out.println(uniqueID);
this.newsRepository.findByTimestampGreaterThanOrderByTimestampDesc(lastChecked).take(5).doOnEach(new Consumer<Signal<News>>() {
@Override
public void accept(Signal<News> commentSignal) {
fluxSink.next(commentSignal.get());
}
}).subscribe();
lastChecked = Calendar.getInstance().getTime();
lastChecked.setTime(lastChecked.getTime() - 2000);
return s;
})
.subscribe();
}).publishOn(Schedulers.parallel())
.onBackpressureBuffer()
.publish();
}
@GetMapping(path = "/news/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Object> comments(@RequestParam(required=false) String date) throws ParseException {
return flux.autoConnect();
}
关于java - 如何在 Spring 创造 react 堆热流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079171/
我在创建/理解 promise 方面遇到了困难。我了解它们的优点并了解如何使用它们。创建自己的 promise 功能是困难的部分。简单地说,如何将此函数转换为与 Promise 一起使用: ret.g
这是我以前的question的跟进 假设我想用我的函数创建一个future,但是不想立即启动它(即我不想调用val f = Future { ... // my function}。 现在,我可以看到
使用以下函数表示从本地 html 文件生成 Web 存档 function TLessonConstructor2.CreateMHT( const FileName : string):boolea
我正在研究注册安全。 @RestController public class UserController { @Autowired private BCryptPasswordEncoder bC
在下面的示例代码中,我想创建一个 Item来自 Component 的对象: struct Component { }; struct Item { explicit Item(Compone
我有以下代码。我认为通过发布我可以创建一个热流,但是每个连接上的 uniqueId 都不同。我希望 create 方法执行一次,然后作为任意数量的订阅者的热流运行。 private Date
我有以下型号 type User struct { gorm.Model Languages []Language `gorm:"many2many:user_language
我想做的是用管道创建这种通信: 1 / \ 3 2 \ / 4 所以应该有3个 child 。 parent 给第一个和第二个 child
我正在将一些代码从 Win32 移植到使用锁定文件的 Linux。我用 open 为 Linux 做了一个实现,但我不确定如果文件在 Samba 共享上它是否会工作。我试过了,它似乎可以正常工作,但我
我是一名优秀的程序员,十分优秀!