Moments — a Passage of Time Events API

spring-modulith-moments 是一个受到 Matthias Verraes blog post 大量启发的经过时间事件实现。它是一种基于时间的事件方式,可触发与特定已过去时间段相关的操作。

要使用摘要,请在您的项目中包含以下依赖项:

  • Maven

  • Gradle

<dependency>
  <groupId>org.springframework.modulith</groupId>
  <artifactId>spring-modulith-moments</artifactId>
</dependency>
dependencies {
  implementation 'org.springframework.modulith:spring-modulith-moments'
}

添加到项目类路径的依赖项会在您的应用程序中导致以下情况:

  • 如果已经过了一段时间,应用程序代码可以在 Spring 事件侦听器中引用 HourHasPassed, DayHasPassed, WeekHasPassed, MonthHasPassed, QuarterHasPassed, YearHasPassed 类型以获取通知。

  • ApplicationContext 中提供了类型为 org.springframework.modulith.Moments 的 Bean,该 Bean 包含触发这些事件的逻辑。

  • 如果将 spring.modulith.moments.enable-time-machine 设置为 true,该实例将成为 org.springframework.modulith.TimeMachine,该实例允许“转移”时间,并由此触发所有的中间事件,这对集成测试由事件触发的功能很有用。

默认情况下,Moments 使用 Clock.systemUTC() 实例。要自定义此设置,请声明类型为 Clock 的 bean。

  • Java

  • Kotlin

@Configuration
class MyConfiguration {

  @Bean
  Clock myCustomClock() {
    // Create a custom Clock here
  }
}
@Configuration
class MyConfiguration {

  @Bean
  fun myCustomClock(): Clock {
    // Create a custom Clock here
  }
}

Moments 公开以下应用程序属性以进行高级自定义:

Table 1. Available application properties
Property Default value Description

spring.modulith.moments.enable-time-machine

false

如果设置为 trueMoments 实例将变为 TimeMachine,这将公开可将时间推移的 API。对于期望由 Passage of Time 事件触发的功能的集成测试非常有用。

spring.modulith.moments.granularity

hours

事件触发的最小粒度。替代值 days 避免每小时事件。

spring.modulith.moments.locale

Locale.getDefault()

用于确定周界别的 Locale

spring.modulith.moments.quarter-start-month

Months.JANUARY

季度开始的月份。

spring.modulith.moments.zone-id

ZoneOffset#UTC

用于确定附加到已发布事件的时间的 ZoneId