diff --git a/spring-boot-modules/spring-boot-libraries/pom.xml b/spring-boot-modules/spring-boot-libraries/pom.xml
index e9d955edc0..2b1b1b7d12 100644
--- a/spring-boot-modules/spring-boot-libraries/pom.xml
+++ b/spring-boot-modules/spring-boot-libraries/pom.xml
@@ -52,7 +52,11 @@
shedlock-provider-jdbc-template
${shedlock.version}
-
+
+ com.h2database
+ h2
+ ${h2.version}
+
net.sourceforge.barbecue
@@ -79,6 +83,7 @@
javase
${zxing.version}
+
@@ -185,6 +190,7 @@
2.2.4
2.3.2
0.23.0
+ 1.4.200
2.1.0
1.5-beta1
2.1
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/Application.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/Application.java
new file mode 100644
index 0000000000..15422e1065
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/Application.java
@@ -0,0 +1,15 @@
+package com.baeldung;
+
+import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication
+@EnableScheduling
+@EnableSchedulerLock(defaultLockAtMostFor = "PT30S")
+public class Application {
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/Application.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/Application.java
deleted file mode 100644
index cb0d0c1532..0000000000
--- a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/boot/Application.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.baeldung.boot;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.ApplicationContext;
-
-@SpringBootApplication
-public class Application {
- private static ApplicationContext applicationContext;
-
- public static void main(String[] args) {
- applicationContext = SpringApplication.run(Application.class, args);
- }
-}
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/BaeldungTaskScheduler.java
similarity index 85%
rename from spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java
rename to spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/BaeldungTaskScheduler.java
index 060afe660e..cd5f63e962 100644
--- a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/TaskScheduler.java
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/BaeldungTaskScheduler.java
@@ -5,9 +5,8 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
-class TaskScheduler {
-
- @Scheduled(cron = "*/15 * * * *")
+class BaeldungTaskScheduler {
+ @Scheduled(cron = "0 0/15 * * * ?")
@SchedulerLock(name = "TaskScheduler_scheduledTask", lockAtLeastForString = "PT5M", lockAtMostForString = "PT14M")
public void scheduledTask() {
System.out.println("Running ShedLock task");
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java
index 74ea39683d..440e1ffc6a 100644
--- a/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java
+++ b/spring-boot-modules/spring-boot-libraries/src/main/java/com/baeldung/scheduling/shedlock/SchedulerConfiguration.java
@@ -1,12 +1,16 @@
package com.baeldung.scheduling.shedlock;
+import net.javacrumbs.shedlock.core.LockProvider;
+import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
-import org.springframework.scheduling.annotation.EnableScheduling;
+
+import javax.sql.DataSource;
@Configuration
-@EnableScheduling
-@EnableSchedulerLock(defaultLockAtMostFor = "PT30S")
public class SchedulerConfiguration {
-
+ @Bean
+ public LockProvider lockProvider(DataSource dataSource) {
+ return new JdbcTemplateLockProvider(dataSource);
+ }
}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-libraries/src/main/resources/application.yml b/spring-boot-modules/spring-boot-libraries/src/main/resources/application.yml
new file mode 100644
index 0000000000..3477520208
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries/src/main/resources/application.yml
@@ -0,0 +1,6 @@
+spring:
+ datasource:
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:shedlock_DB;INIT=CREATE SCHEMA IF NOT EXISTS shedlock;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
+ username: sa
+ password:
diff --git a/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/scheduling/shedlock/BaeldungTaskSchedulerIntegrationTest.java b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/scheduling/shedlock/BaeldungTaskSchedulerIntegrationTest.java
new file mode 100644
index 0000000000..47f42c133f
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries/src/test/java/com/baeldung/scheduling/shedlock/BaeldungTaskSchedulerIntegrationTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.scheduling.shedlock;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class BaeldungTaskSchedulerIntegrationTest {
+ @Autowired
+ private BaeldungTaskScheduler taskScheduler;
+
+ @Test
+ public void whenShedLockConfigCorrect_thenSpringCtxtStartsWithoutError() {
+ // save the old out
+ PrintStream old = System.out;
+
+ // Create a stream to hold the output for test
+ ByteArrayOutputStream consoleOutput = new ByteArrayOutputStream();
+ PrintStream ps = new PrintStream(consoleOutput);
+ System.setOut(ps);
+ //test
+ taskScheduler.scheduledTask();
+ System.out.flush();
+ String expected = "Running ShedLock task\n";
+ assertThat(consoleOutput.toString()).isEqualTo(expected);
+
+ //restore the old out
+ System.setOut(old);
+ }
+
+}
\ No newline at end of file