Skip to content
Go back

Spring Boot项目启用native构建后由于序列化对象缺少ReflectionHints导致json数据为'{}'

Edit page

Spring Boot项目启用native构建后由于序列化对象缺少ReflectionHints导致json数据为’{}’

基于graalvmspring boot项目打包好后调用/scheduling/api/v1/taskDefinitions接口返回如下数据, 其中triggerStrategy字段是空json对象

[
  {
    "id": "BILLING_SYNC_FOR_DEPLOYMENT_127",
    "triggerStrategy": {},
    "tags": {
      "EXECUTOR": "com.fastonetech.billing.sync.scheduling.BillingSyncTaskExecutor"
    },
    "variables": {
      "SOURCE_RCLONE_CONFIG": "TENCENT_ap-beijing",
      "SOURCE_BUCKET": "cheng1201-1310454728",
      "SOURCE_PATH": "",
      "TARGET_RCLONE_CONFIG": "aggregation",
      "TARGET_BUCKET": "billing-aggregation",
      "TARGET_PATH": "TENCENT/ap-beijing/cheng1201-1310454728"
    }
  }
]

原因

triggerStrategy字段对应的java中的类型是interface, 需要为spring-aot进行配置, 以便其能够在运行时被正确地序列化

解决方案

ReflectiveProcessor实现类中新增如下配置, 这里只展示了本次修复的内容
其中, TaskTriggerStrategyinterface, CronTaskTriggerStrategyPeriodicTaskTriggerStrategy为其实现类

class ReflectiveProcessorImpl : ReflectiveProcessor {

	override fun registerReflectionHints(hints: ReflectionHints, element: AnnotatedElement) {
		val registrar = BindingReflectionHintsRegistrar()
		registrar.registerReflectionHints(
			hints,
			arrayOf(
				TaskTriggerStrategy::class.java,
				CronTaskTriggerStrategy::class.java,
				PeriodicTaskTriggerStrategy::class.java
			)
		)
	}

}

备注


Edit page
Share this post on:

Previous Post
TestContainers启动完fastone-auditing容器后客户端连接报错
Next Post
通过引入防御性复制以避免ConcurrentModificationException