diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5a1183d..88aa249 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -317,6 +317,7 @@ jobs:
java-version: '17'
artifactory-publish: ${{ inputs.maven-build-only != true }}
jf-artifactory-spring: ${{ secrets.JF_ARTIFACTORY_SPRING }}
+ jf-mvn-build-commands: '-B clean install -DskipTests'
docker-push: ${{ inputs.maven-build-only != true }}
docker-username: ${{ secrets.DOCKERHUB_USERNAME }}
docker-password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -330,7 +331,7 @@ jobs:
- uses: ./.github/actions/build-sample-app
with:
app-dir: 'timestamp-task-3.0.x'
- mvn-build-commands: '-B clean install spring-boot:build-image'
+ mvn-build-commands: '-B clean install spring-boot:build-image -Pnative'
artifactory-publish: ${{ inputs.maven-build-only != true }}
jf-artifactory-spring: ${{ secrets.JF_ARTIFACTORY_SPRING }}
artifactory-repo-deploy-releases: 'libs-milestone-local'
@@ -347,7 +348,7 @@ jobs:
- uses: ./.github/actions/build-sample-app
with:
app-dir: 'timestamp-batch-3.0.x'
- mvn-build-commands: '-B clean install spring-boot:build-image'
+ mvn-build-commands: '-B clean install spring-boot:build-image -Pnative'
artifactory-publish: ${{ inputs.maven-build-only != true }}
jf-artifactory-spring: ${{ secrets.JF_ARTIFACTORY_SPRING }}
artifactory-repo-deploy-releases: 'libs-milestone-local'
diff --git a/timestamp-batch-2.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java b/timestamp-batch-2.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java
index e7975c8..8fe093e 100644
--- a/timestamp-batch-2.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java
+++ b/timestamp-batch-2.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java
@@ -113,7 +113,7 @@ public class TimestampBatchTaskConfiguration {
logger.info("jobstep1:{}", contribution.getStepExecution().getExecutionContext());
logger.info("job2:{}", contribution.getStepExecution().getJobExecution().getExecutionContext());
DateFormat dateFormat = new SimpleDateFormat(config.getFormat());
- logger.info("Job2 was run with date {}", dateFormat.format(new Date()));
+ logger.info("Job2 was run with {}", dateFormat.format(new Date()));
return RepeatStatus.FINISHED;
})
.build())
diff --git a/timestamp-batch-3.0.x/pom.xml b/timestamp-batch-3.0.x/pom.xml
index 9ad9786..eae1dcf 100644
--- a/timestamp-batch-3.0.x/pom.xml
+++ b/timestamp-batch-3.0.x/pom.xml
@@ -5,7 +5,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.2.3
+ 3.3.2
io.spring
@@ -16,7 +16,7 @@
17
- 2022.0.5
+ 2023.0.3
@@ -51,10 +51,6 @@
h2
[2.2,)
-
- org.postgresql
- postgresql
-
org.springframework.boot
spring-boot-starter-test
@@ -77,6 +73,10 @@
io.micrometer
micrometer-registry-prometheus
+
+ ch.qos.logback
+ logback-classic
+
org.assertj
assertj-core
@@ -103,11 +103,27 @@
spring-boot-maven-plugin
+ IF_NOT_PRESENT
+
+ ${java.version}
+
springcloudtask/${project.artifactId}:${project.version}
-
+
+
+ native
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+
+
+
+
+
diff --git a/timestamp-batch-3.0.x/run-docker.sh b/timestamp-batch-3.0.x/run-docker.sh
new file mode 100755
index 0000000..57ecdaa
--- /dev/null
+++ b/timestamp-batch-3.0.x/run-docker.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set +e
+docker inspect springcloudtask/timestamp-batch-task:3.0.0 > /dev/null
+RC=$?
+set -e
+if((RC>0)); then
+ ./mvnw clean spring-boot:build-image -Pnative
+fi
+docker run springcloudtask/timestamp-batch-task:3.0.0
diff --git a/timestamp-batch-3.0.x/run-jar.sh b/timestamp-batch-3.0.x/run-jar.sh
new file mode 100755
index 0000000..b58eced
--- /dev/null
+++ b/timestamp-batch-3.0.x/run-jar.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+if [ ! -f ./target/timestamp-batch-task-3.0.0.jar ]; then
+ ./mvnw clean package
+fi
+java -jar ./target/timestamp-batch-task-3.0.0.jar
\ No newline at end of file
diff --git a/timestamp-batch-3.0.x/run-native.sh b/timestamp-batch-3.0.x/run-native.sh
new file mode 100755
index 0000000..334d689
--- /dev/null
+++ b/timestamp-batch-3.0.x/run-native.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+if [ ! -f ./target/timestamp-batch-task ]; then
+ ./mvnw clean native:compile -Pnative
+fi
+./target/timestamp-batch-task
diff --git a/timestamp-batch-3.0.x/src/main/java/io/spring/BatchJobApplication.java b/timestamp-batch-3.0.x/src/main/java/io/spring/BatchJobApplication.java
index ff7fe10..e17ae59 100644
--- a/timestamp-batch-3.0.x/src/main/java/io/spring/BatchJobApplication.java
+++ b/timestamp-batch-3.0.x/src/main/java/io/spring/BatchJobApplication.java
@@ -16,6 +16,11 @@
package io.spring;
+import java.util.Arrays;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
@@ -28,31 +33,30 @@ import org.springframework.context.annotation.Bean;
@EnableTask
@SpringBootApplication
public class BatchJobApplication {
-
+ private static final Logger logger = LoggerFactory.getLogger(BatchJobApplication.class);
public static void main(String[] args) {
SpringApplication.run(BatchJobApplication.class, args);
}
@Bean
- public TimestampTask timestampTask(JobLauncher jobLauncher, Job job1, Job job2) {
- return new TimestampTask(jobLauncher, job1, job2);
+ public TimestampTask timestampTask(JobLauncher jobLauncher, Job job1) {
+ return new TimestampTask(jobLauncher, job1);
}
public static class TimestampTask implements CommandLineRunner {
private final JobLauncher launcher;
private final Job job1;
- private final Job job2;
- public TimestampTask(JobLauncher launcher, Job job1, Job job2) {
+
+ public TimestampTask(JobLauncher launcher, Job job1) {
this.launcher = launcher;
this.job1 = job1;
- this.job2 = job2;
}
@Override
public void run(String... strings) throws Exception {
+ logger.info("starting: {} with {}", job1.getName(), Arrays.asList(strings));
launcher.run(job1, new JobParameters());
- launcher.run(job2, new JobParameters());
}
}
}
diff --git a/timestamp-batch-3.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java b/timestamp-batch-3.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java
index 11c60ad..e077ff1 100644
--- a/timestamp-batch-3.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java
+++ b/timestamp-batch-3.0.x/src/main/java/io/spring/configuration/TimestampBatchTaskConfiguration.java
@@ -16,64 +16,40 @@
package io.spring.configuration;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
-import org.springframework.batch.core.configuration.support.DefaultBatchConfiguration;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
-import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.transaction.PlatformTransactionManager;
-import javax.sql.DataSource;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
@Configuration
@EnableConfigurationProperties({ TimestampBatchTaskProperties.class })
-public class TimestampBatchTaskConfiguration extends DefaultBatchConfiguration {
+public class TimestampBatchTaskConfiguration {
private static final Logger logger = LoggerFactory.getLogger(TimestampBatchTaskProperties.class);
-
- @Value("${spring.batch.jdbc.table-prefix:BATCH_}")
- private String tablePrefix;
-
@Autowired
private TimestampBatchTaskProperties config;
- @Bean
- @ConditionalOnProperty(name = "spring.datasource.driver-class-name", matchIfMissing = true, havingValue="matchonlyifmissing")
- public DataSource dataSource() {
- return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
- .addScript("/org/springframework/batch/core/schema-h2.sql")
- .generateUniqueName(true).build();
- }
-
- protected String getTablePrefix() {
- return tablePrefix;
- }
-
- /**
- * Override default transaction isolation level 'ISOLATION_REPEATABLE_READ' which Oracle does not
- * support.
- */
- @Bean
+ @Bean(name = "job1step1")
public Step job1step1(JobRepository jobRepository, PlatformTransactionManager springCloudTaskTransactionManager) {
return new StepBuilder("job1step1", jobRepository)
- .tasklet(getTasklet("Job1 was run with date %s"), springCloudTaskTransactionManager).build();
+ .tasklet(getTasklet("Job1 was run with format %s and result=date %s"), springCloudTaskTransactionManager).build();
}
private Tasklet getTasklet(String format) {
@@ -83,31 +59,17 @@ public class TimestampBatchTaskConfiguration extends DefaultBatchConfiguration {
contribution.getStepExecution().getJobExecution().getExecutionContext().put("job-ctx1", "exec-job1");
logger.info("{}:{}", contribution.getStepExecution().getStepName(), contribution.getStepExecution().getExecutionContext());
logger.info("{}:{}", contribution.getStepExecution().getJobExecution().getJobInstance().getJobName(), contribution.getStepExecution().getJobExecution().getExecutionContext());
- logger.info(String.format(format, dateFormat.format(new Date())));
+ logger.info(String.format(format, format, dateFormat.format(new Date())));
return RepeatStatus.FINISHED;
};
}
- @Bean
- public Job job1(JobRepository jobRepository, Step job1step1) {
+ @Bean(name = "job1")
+ public Job job1(JobRepository jobRepository, @Qualifier("job1step1") Step job1step1) {
return new JobBuilder("job1", jobRepository)
.start(job1step1)
.build();
}
- @Bean
- public Step job2step1(JobRepository jobRepository,
- PlatformTransactionManager springCloudTaskTransactionManager
- ) {
- return new StepBuilder("job2step1", jobRepository)
- .tasklet(getTasklet("Job2 was run with date %s"), springCloudTaskTransactionManager)
- .build();
- }
- @Bean
- public Job job2(JobRepository jobRepository, Step job2step1) {
- return new JobBuilder("job2", jobRepository)
- .start(job2step1)
- .build();
- }
}
diff --git a/timestamp-batch-3.0.x/src/test/java/io/spring/TimestampBatchTaskTests.java b/timestamp-batch-3.0.x/src/test/java/io/spring/TimestampBatchTaskTests.java
index 2011722..75fecb1 100644
--- a/timestamp-batch-3.0.x/src/test/java/io/spring/TimestampBatchTaskTests.java
+++ b/timestamp-batch-3.0.x/src/test/java/io/spring/TimestampBatchTaskTests.java
@@ -16,11 +16,10 @@
package io.spring;
+import io.spring.configuration.TimestampBatchTaskConfiguration;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
@@ -33,7 +32,14 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Glenn Renfro
*/
@ExtendWith(OutputCaptureExtension.class)
-@SpringBootTest(properties = "--timestamp.format=yyyy.......")
+@SpringBootTest(classes = {
+ BatchJobApplication.class,
+ TimestampBatchTaskConfiguration.class
+},
+ properties = {
+ "logging.level.root=debug",
+ "timestamp.format=yyyy......."
+ })
public class TimestampBatchTaskTests {
@Test
@@ -41,9 +47,9 @@ public class TimestampBatchTaskTests {
final String TEST_DATE_DOTS = ".......";
final String CREATE_TASK_MESSAGE = "Creating: TaskExecution{executionId=";
final String UPDATE_TASK_MESSAGE = "Updating: TaskExecution with executionId=1 with the following";
- final String JOB1_MESSAGE = "Job1 was run with date ";
- final String JOB2_MESSAGE = "Job2 was run with date ";
-
+ final String JOB1_MESSAGE = "Job1 was run with ";
+
+
String output = capturedOutput.toString();
assertThat(output).contains(TEST_DATE_DOTS);
@@ -51,14 +57,13 @@ public class TimestampBatchTaskTests {
assertThat(output).contains(UPDATE_TASK_MESSAGE);
assertThat(output).contains(JOB1_MESSAGE);
- assertThat(output).contains(JOB2_MESSAGE);
}
- @SpringBootApplication
- public static class TestTimestampBatchTaskApplication {
- public static void main(String[] args) {
- SpringApplication.run(TestTimestampBatchTaskApplication.class, args);
- }
- }
+// @SpringBootApplication
+// public static class TestTimestampBatchTaskApplication {
+// public static void main(String[] args) {
+// SpringApplication.run(TestTimestampBatchTaskApplication.class, args);
+// }
+// }
}
diff --git a/timestamp-task-3.0.x/pom.xml b/timestamp-task-3.0.x/pom.xml
index ddec9e9..c7051f0 100644
--- a/timestamp-task-3.0.x/pom.xml
+++ b/timestamp-task-3.0.x/pom.xml
@@ -5,7 +5,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.1.4
+ 3.3.2
io.spring
@@ -16,7 +16,7 @@
17
- 2022.0.4
+ 2023.0.3
@@ -90,11 +90,27 @@
spring-boot-maven-plugin
+ IF_NOT_PRESENT
+
+ ${java.version}
+
springcloudtask/${project.artifactId}:${project.version}
-
+
+
+ native
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+
+
+
+
+
diff --git a/timestamp-task-3.0.x/run-docker.sh b/timestamp-task-3.0.x/run-docker.sh
new file mode 100755
index 0000000..369f41f
--- /dev/null
+++ b/timestamp-task-3.0.x/run-docker.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+set +e
+docker inspect springcloudtask/timestamp-task:3.0.0 > /dev/null
+RC=$?
+set -e
+if((RC>0)); then
+ ./mvnw clean spring-boot:build-image -Pnative
+fi
+docker run springcloudtask/timestamp-task:3.0.0
diff --git a/timestamp-task-3.0.x/run-jar.sh b/timestamp-task-3.0.x/run-jar.sh
new file mode 100755
index 0000000..0901d39
--- /dev/null
+++ b/timestamp-task-3.0.x/run-jar.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+if [ ! -f ./target/timestamp-task-3.0.0.jar ]; then
+ ./mvnw clean package
+fi
+java -jar ./target/timestamp-task-3.0.0.jar
\ No newline at end of file
diff --git a/timestamp-task-3.0.x/run-native.sh b/timestamp-task-3.0.x/run-native.sh
new file mode 100755
index 0000000..29d2bce
--- /dev/null
+++ b/timestamp-task-3.0.x/run-native.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+if [ ! -f ./target/timestamp-task ]; then
+ ./mvnw clean native:compile -Pnative
+fi
+./target/timestamp-task
diff --git a/timestamp-task-3.0.x/src/main/java/io/spring/timestamp/TaskApplication.java b/timestamp-task-3.0.x/src/main/java/io/spring/timestamp/TaskApplication.java
index ea9b14b..992d9f5 100644
--- a/timestamp-task-3.0.x/src/main/java/io/spring/timestamp/TaskApplication.java
+++ b/timestamp-task-3.0.x/src/main/java/io/spring/timestamp/TaskApplication.java
@@ -19,10 +19,12 @@ package io.spring.timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
import java.util.Date;
+import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
@@ -40,7 +42,7 @@ import org.springframework.context.annotation.Bean;
@EnableConfigurationProperties({TimestampTaskProperties.class})
public class TaskApplication {
- private static final Log logger = LogFactory.getLog(TaskApplication.class);
+ private static final Logger logger = LoggerFactory.getLogger(TaskApplication.class);
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
@@ -60,9 +62,11 @@ public class TaskApplication {
private TimestampTaskProperties config;
@Override
- public void run(String... strings) throws Exception {
+ public void run(String... arguments) throws Exception {
+ List args = Arrays.asList(arguments);
+ logger.info("starting with {}", args);
DateFormat dateFormat = new SimpleDateFormat(this.config.getFormat());
- logger.info(dateFormat.format(new Date()));
+ logger.info("completed at:{} with args {}", dateFormat.format(new Date()), args);
}
}
}
diff --git a/timestamp-task-3.0.x/src/main/resources/application.properties b/timestamp-task-3.0.x/src/main/resources/application.properties
index 398a1dc..66f6a63 100644
--- a/timestamp-task-3.0.x/src/main/resources/application.properties
+++ b/timestamp-task-3.0.x/src/main/resources/application.properties
@@ -1 +1,2 @@
logging.level.org.springframework.cloud.task=debug
+logging.level.io.spring=debug
\ No newline at end of file
diff --git a/timestamp-task-3.0.x/src/test/java/io/spring/timestamp/TaskApplicationTests.java b/timestamp-task-3.0.x/src/test/java/io/spring/timestamp/TaskApplicationTests.java
index ba2e0cf..418e131 100644
--- a/timestamp-task-3.0.x/src/test/java/io/spring/timestamp/TaskApplicationTests.java
+++ b/timestamp-task-3.0.x/src/test/java/io/spring/timestamp/TaskApplicationTests.java
@@ -65,6 +65,6 @@ public class TaskApplicationTests {
count++;
}
assertThat(count).as("The number of task titles did not match expected: ")
- .isEqualTo(1);
+ .isGreaterThanOrEqualTo(1);
}
}