class Data {
private Integer id;
private LocalDateTime sendAt;
}
List<Data> data = Arrays.asList(
new Data(1, LocalDateTime.now().plusSeconds(1)),
new Data(2, LocalDateTime.now().plusSeconds(2)),
new Data(3, LocalDateTime.now().plusSeconds(3)),
new Data(4, LocalDateTime.now().plusSeconds(5)),
new Data(5, LocalDateTime.now().plusSeconds(8)),
new Data(6, LocalDateTime.now().plusSeconds(13)),
new Data(7, LocalDateTime.now().plusSeconds(21)),
new Data(8, LocalDateTime.now().plusSeconds(34)),
new Data(9, LocalDateTime.now().plusSeconds(55)));
Flux<Data> dataFlux = Flux.fromIterable(data);
dataFlux.takeWhile(d -> d.sendAt.isAfter( LocalDateTime.now() ))
.subscribe(x -> System.out.println(x));
我希望这些事件在1,2,3,5,8,13,21,...
秒后打印出来。
Spring WebFlux/Reactor可能吗?
可以通过将delayteo
与mono.delay(
&HTTP流与mediatype.application_stream_json_value
或SSE的mediatype.text_event_stream_value
:
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.time.Duration;
import java.util.Arrays;
import java.util.List;
@RestController
public class FluxDateTime {
@GetMapping(value = "/time", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public Flux<Data> getData() {
List<Data> data = Arrays.asList(
new Data(1, 1),
new Data(2, 2),
new Data(3, 3),
new Data(4, 5),
new Data(5, 8),
new Data(6, 13),
new Data(7, 21),
new Data(8, 34),
new Data(9, 55));
return Flux.fromIterable(data)
.delayUntil(d -> Mono.delay(Duration.ofSeconds(d.getDelay())));
}
/* Keep in mind that empty constructor, getters/setters
are purely only for JSON serialization */
private final class Data {
private int id;
private int delay;
public Data() {}
public Data(int id, int delay) {
this.id = id;
this.delay = delay;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getDelay() {
return delay;
}
public void setDelay(int delay) {
this.delay = delay;
}
}
}
每个元素的通量收集延迟,直到底层的单流终止。每个单声道根据输入流数据以秒为单位延迟各自的时间。
实际上,我们已经得到了流式HTTP响应,其中包含您所需的自定义延迟:
$ curl http://localhost:8080/time
{"id":1,"delay":1} # after 1 sec
{"id":2,"delay":2} # after 2 sec
{"id":3,"delay":3} # and so on
{"id":4,"delay":5}
{"id":5,"delay":8}
{"id":6,"delay":13}
{"id":7,"delay":21}
{"id":8,"delay":34}
{"id":9,"delay":55}
问题内容: 假设我有以下模型: 我想通过创建一个在将来(今天+ 1或某天)结束的事件进行测试,并对日期和时间进行打桩,以便系统认为我们已经达到了该将来的日期。 就python而言,我希望能够存根所有系统时间对象。这包括,和任何其他标准日期/时间对象。 这样做的标准方法是什么? 问题答案: 编辑 :由于我的答案是此处接受的答案,因此我正在对其进行更新,以使所有人都知道在此同时创建了更好的方法,这是f
问题内容: 我正在使用ehcache 2.5.4。 我有一个对象,需要整天进行缓存,并在每天的00:00 am用新值刷新。 当前使用ehcache配置,我只能设置生存时间和空闲时间,但这取决于我创建对象的时间或使用时间。即: 有没有一种方法可以使ehcache根据特定的时间使特定的缓存过期。 问题答案: 我通过扩展Ehcache的类来做到这一点: 其余的操作就像将对象的新实例而不是放入缓存一样简单
问题内容: 我正在做一个自动化的查询。它需要查找最后一天晚上8点到晚上8点之间的所有交易。我当时正在考虑做这样的事情 对于自动查询,这很适合找出日期部分。但是变量的TIME部分是查询执行的当前时间。有没有一种快速简单的方法来将两个变量的时间部分硬编码为8:00 PM? 问题答案:
问题内容: 我有一个脚本,需要在脚本的不同行执行以下命令: 在我的陈述中,我有以下内容: 我收到以下错误: 如果我将语句的顺序更改为: 我收到以下错误: 如果我再次将语句更改为: 我收到以下错误: 这是怎么回事,我怎么都可以工作? 问题答案: 您的麻烦是,您有一些代码希望对 模块 进行引用,而其他代码希望对类进行引用 。 显然,不能两者兼有。 当您这样做时: 您首先要设置为对该类的引用,然后立即将
所以我有: < code >日期开始日期,即< code > EEST 2022年3月27日17时32分01秒 和 ,即 我需要根据这两个值生成一个新日期。我需要将240H周期添加到开始日期。240H意味着我需要添加到开始日期的10天,我最终需要一个新的日期,应该是EEST 2022年4月6日星期三17:32.01。 PS.我是Java的新手,希望我不会问愚蠢的事情。
我想将时间戳转换为。 这是我到目前为止已经实现的,但是它给了我错误的月份 任何帮助将不胜感激。