fix(config): fail fast on invalid operation-day zone
运营日时区只认 PARAM:msgx.operation-day.zone:JobRunner、HistorySweepJob、JdbcSnapshotLogRepository.purgeBefore 改走注入的 OperationDayProps;ScheduleProcessor/AdftProcessor 删除「非法值回退字面量」;新增 @Context 启动自检 OperationDayZoneCheck,配置错位在启动时暴露。 验证:./gradlew test 126 tests / 0 fail(新增 OperationDayPropsTest 覆盖合法解析与非法即失败)。
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package com.gzzn.omms.msgexchange.config
|
||||
|
||||
import io.micronaut.context.annotation.ConfigurationProperties
|
||||
import io.micronaut.context.annotation.Context
|
||||
import jakarta.inject.Singleton
|
||||
import java.time.ZoneId
|
||||
|
||||
/**
|
||||
* 算航班运营保障日(OPERATION_DAY)要用的两个参数,对应配置里的 `msgx.operation-day.*`:
|
||||
@@ -16,4 +19,22 @@ class OperationDayProps {
|
||||
|
||||
/** 切日边界小时:SODT 的本地时刻早于这个点就归属前一个运营日。取值 0–23。 */
|
||||
var cutoffHour: Int = 0
|
||||
|
||||
/**
|
||||
* 解析机场时区。非法值直接失败,**不回退到代码字面量**:
|
||||
* `PARAM:msgx.operation-day.zone` 是运营日时区的唯一出处,回退会把配置错位藏起来。
|
||||
*/
|
||||
fun zoneId(): ZoneId =
|
||||
try {
|
||||
ZoneId.of(zone)
|
||||
} catch (e: Exception) {
|
||||
throw IllegalStateException("msgx.operation-day.zone is not a valid IANA zone: '$zone'", e)
|
||||
}
|
||||
}
|
||||
|
||||
/** 启动自检:时区非法必须在启动时失败,而不是等第一条报文进来才炸;`@Context` 使其急切创建。 */
|
||||
@Singleton
|
||||
@Context
|
||||
class OperationDayZoneCheck(props: OperationDayProps) {
|
||||
private val zone: ZoneId = props.zoneId()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user