diff --git a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskBatchRuntimeHints.java b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskBatchRuntimeHints.java
new file mode 100644
index 00000000..6cc230db
--- /dev/null
+++ b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskBatchRuntimeHints.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2022-2022 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.task.batch.configuration;
+
+import org.springframework.aop.SpringProxy;
+import org.springframework.aop.framework.Advised;
+import org.springframework.aot.hint.RuntimeHints;
+import org.springframework.aot.hint.RuntimeHintsRegistrar;
+import org.springframework.aot.hint.TypeReference;
+import org.springframework.core.DecoratingProxy;
+
+/**
+ * Native Hints for Spring Cloud Task Batch.
+ *
+ * To be removed when batch adds its hints.
+ *
+ * @author Glenn Renfro
+ * @since 3.0
+ */
+public class TaskBatchRuntimeHints implements RuntimeHintsRegistrar {
+
+ @Override
+ public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
+
+ hints.resources().registerPattern("org/springframework/batch/core/schema-h2.sql");
+
+ hints.proxies()
+ .registerJdkProxy(builder -> builder
+ .proxiedInterfaces(TypeReference.of("org.springframework.batch.core.repository.JobRepository"))
+ .proxiedInterfaces(SpringProxy.class, Advised.class, DecoratingProxy.class));
+
+ }
+
+}
diff --git a/spring-cloud-task-batch/src/main/resources/META-INF/spring/aot.factories b/spring-cloud-task-batch/src/main/resources/META-INF/spring/aot.factories
new file mode 100644
index 00000000..ea6f3846
--- /dev/null
+++ b/spring-cloud-task-batch/src/main/resources/META-INF/spring/aot.factories
@@ -0,0 +1,2 @@
+org.springframework.aot.hint.RuntimeHintsRegistrar=\
+org.springframework.cloud.task.batch.configuration.TaskBatchRuntimeHints
diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java
index 413b5872..b7c9f260 100644
--- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java
+++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java
@@ -33,6 +33,7 @@ import org.springframework.cloud.task.repository.TaskExplorer;
import org.springframework.cloud.task.repository.TaskNameResolver;
import org.springframework.cloud.task.repository.TaskRepository;
import org.springframework.cloud.task.repository.support.SimpleTaskNameResolver;
+import org.springframework.cloud.task.repository.support.SimpleTaskRepository;
import org.springframework.cloud.task.repository.support.TaskRepositoryInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -80,8 +81,8 @@ public class SimpleTaskAutoConfiguration {
private TaskExplorer taskExplorer;
@Bean
- public TaskRepository taskRepository() {
- return this.taskRepository;
+ public SimpleTaskRepository taskRepository() {
+ return (SimpleTaskRepository) this.taskRepository;
}
@Bean
diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskRuntimeHints.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskRuntimeHints.java
index b10b6d7e..3c2e065b 100644
--- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskRuntimeHints.java
+++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskRuntimeHints.java
@@ -24,9 +24,12 @@ import org.springframework.aot.hint.MemberCategory;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import org.springframework.aot.hint.TypeReference;
+import org.springframework.aot.hint.support.RuntimeHintsUtils;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cloud.task.repository.TaskExplorer;
import org.springframework.cloud.task.repository.TaskRepository;
import org.springframework.core.DecoratingProxy;
+import org.springframework.core.annotation.SynthesizedAnnotation;
import org.springframework.util.ClassUtils;
/**
@@ -52,11 +55,16 @@ public class TaskRuntimeHints implements RuntimeHintsRegistrar {
TypeReference.of("org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer"),
hint -> hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
MemberCategory.INVOKE_DECLARED_METHODS));
+
hints.proxies().registerJdkProxy(builder -> builder.proxiedInterfaces(TaskRepository.class)
.proxiedInterfaces(SpringProxy.class, Advised.class, DecoratingProxy.class));
hints.proxies().registerJdkProxy(builder -> builder.proxiedInterfaces(TaskExplorer.class)
.proxiedInterfaces(SpringProxy.class, Advised.class, DecoratingProxy.class));
+ // Remove Qualifier hints once SCSt can be natively compiled.
+ hints.reflection().registerType(Qualifier.class, RuntimeHintsUtils.ANNOTATION_HINT);
+ hints.proxies().registerJdkProxy(Qualifier.class, SynthesizedAnnotation.class);
+
if (!ClassUtils.isPresent("com.zaxxer.hikari.HikariDataSource", classLoader)) {
return;
}
diff --git a/spring-cloud-task-samples/task-events/pom.xml b/spring-cloud-task-samples/task-events/pom.xml
index 1cda9907..2519c077 100644
--- a/spring-cloud-task-samples/task-events/pom.xml
+++ b/spring-cloud-task-samples/task-events/pom.xml
@@ -58,6 +58,10 @@
spring-boot-starter-test
test
+
+ com.h2database
+ h2
+
diff --git a/spring-cloud-task-samples/task-events/src/main/resources/application.properties b/spring-cloud-task-samples/task-events/src/main/resources/application.properties
index 62a3ed49..617cdddc 100644
--- a/spring-cloud-task-samples/task-events/src/main/resources/application.properties
+++ b/spring-cloud-task-samples/task-events/src/main/resources/application.properties
@@ -1,3 +1,4 @@
spring.application.name=Event Emitting Task
logging.level.org.springframework.cloud.stream=DEBUG
logging.level.org.springframework.cloud.task=DEBUG
+
diff --git a/spring-cloud-task-samples/timestamp/src/main/resources/application.properties b/spring-cloud-task-samples/timestamp/src/main/resources/application.properties
index cba59d43..b9b3a7b6 100644
--- a/spring-cloud-task-samples/timestamp/src/main/resources/application.properties
+++ b/spring-cloud-task-samples/timestamp/src/main/resources/application.properties
@@ -1,4 +1,4 @@
spring.application.name=Demo Timestamp Task
logging.level.org.springframework.cloud.task=DEBUG
-spring.aop.proxy-target-class=false
+#spring.aop.proxy-target-class=false