From bbc4e336e5e4168a9a30866136400ef8fba1ed29 Mon Sep 17 00:00:00 2001 From: jvalkeal Date: Mon, 19 Feb 2018 17:13:01 +0200 Subject: [PATCH] Base work adding mongo and redis to datajpapersist - Build deps to mongo and redis - Config changes using profiles to enable mongo or redis while jpa is default - Backport #509 --- spring-statemachine-samples/build.gradle | 5 ++ .../datajpapersist/StateMachineConfig.java | 66 +++++++++++++++---- .../src/main/resources/application.yml | 37 +++++++++++ 3 files changed, 94 insertions(+), 14 deletions(-) diff --git a/spring-statemachine-samples/build.gradle b/spring-statemachine-samples/build.gradle index 5879b84d..d2856479 100644 --- a/spring-statemachine-samples/build.gradle +++ b/spring-statemachine-samples/build.gradle @@ -126,8 +126,13 @@ project('spring-statemachine-samples-datajpapersist') { dependencies { compile project(":spring-statemachine-boot") compile project(":spring-statemachine-data-common:spring-statemachine-data-jpa") + compile project(":spring-statemachine-data-common:spring-statemachine-data-redis") + compile project(":spring-statemachine-data-common:spring-statemachine-data-mongodb") + compile("org.springframework.boot:spring-boot-starter-web:$springBootVersion") compile("org.springframework.boot:spring-boot-starter-thymeleaf:$springBootVersion") compile("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion") + compile("org.springframework.boot:spring-boot-starter-data-redis:$springBootVersion") + compile("org.springframework.boot:spring-boot-starter-data-mongodb:$springBootVersion") compile("org.springframework.boot:spring-boot-devtools:$springBootVersion") compile("com.h2database:h2:$h2Version") } diff --git a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineConfig.java b/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineConfig.java index 3d2a427f..ed6b942e 100644 --- a/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineConfig.java +++ b/spring-statemachine-samples/datajpapersist/src/main/java/demo/datajpapersist/StateMachineConfig.java @@ -20,6 +20,7 @@ import java.util.EnumSet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; import org.springframework.statemachine.config.EnableStateMachineFactory; import org.springframework.statemachine.config.StateMachineConfigurerAdapter; import org.springframework.statemachine.config.StateMachineFactory; @@ -28,6 +29,10 @@ import org.springframework.statemachine.config.builders.StateMachineStateConfigu import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; import org.springframework.statemachine.data.jpa.JpaPersistingStateMachineInterceptor; import org.springframework.statemachine.data.jpa.JpaStateMachineRepository; +import org.springframework.statemachine.data.mongodb.MongoDbPersistingStateMachineInterceptor; +import org.springframework.statemachine.data.mongodb.MongoDbStateMachineRepository; +import org.springframework.statemachine.data.redis.RedisPersistingStateMachineInterceptor; +import org.springframework.statemachine.data.redis.RedisStateMachineRepository; import org.springframework.statemachine.persist.StateMachineRuntimePersister; import org.springframework.statemachine.service.DefaultStateMachineService; import org.springframework.statemachine.service.StateMachineService; @@ -35,22 +40,61 @@ import org.springframework.statemachine.service.StateMachineService; @Configuration public class StateMachineConfig { +//tag::snippetA[] + @Configuration + @Profile("jpa") + public static class JpaPersisterConfig { + + @Bean + public StateMachineRuntimePersister stateMachineRuntimePersister( + JpaStateMachineRepository jpaStateMachineRepository) { + return new JpaPersistingStateMachineInterceptor<>(jpaStateMachineRepository); + } + } +//end::snippetA[] + +//tag::snippetB[] + @Configuration + @Profile("mongo") + public static class MongoPersisterConfig { + + @Bean + public StateMachineRuntimePersister stateMachineRuntimePersister( + MongoDbStateMachineRepository jpaStateMachineRepository) { + return new MongoDbPersistingStateMachineInterceptor<>(jpaStateMachineRepository); + } + } +//end::snippetB[] + +//tag::snippetC[] + @Configuration + @Profile("redis") + public static class RedisPersisterConfig { + + @Bean + public StateMachineRuntimePersister stateMachineRuntimePersister( + RedisStateMachineRepository jpaStateMachineRepository) { + return new RedisPersistingStateMachineInterceptor<>(jpaStateMachineRepository); + } + } +//end::snippetC[] + @Configuration @EnableStateMachineFactory public static class MachineConfig extends StateMachineConfigurerAdapter { -//tag::snippetB[] +//tag::snippetD[] @Autowired - private JpaStateMachineRepository jpaStateMachineRepository; + private StateMachineRuntimePersister stateMachineRuntimePersister; @Override public void configure(StateMachineConfigurationConfigurer config) throws Exception { config .withPersistence() - .runtimePersister(stateMachineRuntimePersister()); + .runtimePersister(stateMachineRuntimePersister); } -//end::snippetB[] +//end::snippetD[] @Override public void configure(StateMachineStateConfigurer states) @@ -89,25 +133,19 @@ public class StateMachineConfig { .source(States.S6).target(States.S1) .event(Events.E6); } - -//tag::snippetA[] - @Bean - public StateMachineRuntimePersister stateMachineRuntimePersister() { - return new JpaPersistingStateMachineInterceptor<>(jpaStateMachineRepository); - } -//end::snippetA[] } @Configuration public static class ServiceConfig { -//tag::snippetC[] +//tag::snippetE[] @Bean - public StateMachineService stateMachineService(StateMachineFactory stateMachineFactory, + public StateMachineService stateMachineService( + StateMachineFactory stateMachineFactory, StateMachineRuntimePersister stateMachineRuntimePersister) { return new DefaultStateMachineService(stateMachineFactory, stateMachineRuntimePersister); } -//end::snippetC[] +//end::snippetE[] } public enum States { diff --git a/spring-statemachine-samples/datajpapersist/src/main/resources/application.yml b/spring-statemachine-samples/datajpapersist/src/main/resources/application.yml index d560ab3a..371ff1c8 100644 --- a/spring-statemachine-samples/datajpapersist/src/main/resources/application.yml +++ b/spring-statemachine-samples/datajpapersist/src/main/resources/application.yml @@ -1,6 +1,43 @@ logging: level: root: INFO +spring: + profiles: + active: jpa security: basic: enabled: false + +--- +spring: + profiles: jpa + statemachine: + data: + mongo: + repositories: + enabled: false + redis: + repositories: + enabled: false +--- +spring: + profiles: mongo + statemachine: + data: + jpa: + repositories: + enabled: false + redis: + repositories: + enabled: false +--- +spring: + profiles: redis + statemachine: + data: + jpa: + repositories: + enabled: false + mongo: + repositories: + enabled: false