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
This commit is contained in:
jvalkeal
2018-02-19 17:13:01 +02:00
parent 3ce942fce3
commit bbc4e336e5
3 changed files with 94 additions and 14 deletions

View File

@@ -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")
}

View File

@@ -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<States, Events, String> stateMachineRuntimePersister(
JpaStateMachineRepository jpaStateMachineRepository) {
return new JpaPersistingStateMachineInterceptor<>(jpaStateMachineRepository);
}
}
//end::snippetA[]
//tag::snippetB[]
@Configuration
@Profile("mongo")
public static class MongoPersisterConfig {
@Bean
public StateMachineRuntimePersister<States, Events, String> stateMachineRuntimePersister(
MongoDbStateMachineRepository jpaStateMachineRepository) {
return new MongoDbPersistingStateMachineInterceptor<>(jpaStateMachineRepository);
}
}
//end::snippetB[]
//tag::snippetC[]
@Configuration
@Profile("redis")
public static class RedisPersisterConfig {
@Bean
public StateMachineRuntimePersister<States, Events, String> stateMachineRuntimePersister(
RedisStateMachineRepository jpaStateMachineRepository) {
return new RedisPersistingStateMachineInterceptor<>(jpaStateMachineRepository);
}
}
//end::snippetC[]
@Configuration
@EnableStateMachineFactory
public static class MachineConfig extends StateMachineConfigurerAdapter<States, Events> {
//tag::snippetB[]
//tag::snippetD[]
@Autowired
private JpaStateMachineRepository jpaStateMachineRepository;
private StateMachineRuntimePersister<States, Events, String> stateMachineRuntimePersister;
@Override
public void configure(StateMachineConfigurationConfigurer<States, Events> config)
throws Exception {
config
.withPersistence()
.runtimePersister(stateMachineRuntimePersister());
.runtimePersister(stateMachineRuntimePersister);
}
//end::snippetB[]
//end::snippetD[]
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
@@ -89,25 +133,19 @@ public class StateMachineConfig {
.source(States.S6).target(States.S1)
.event(Events.E6);
}
//tag::snippetA[]
@Bean
public StateMachineRuntimePersister<States, Events, String> stateMachineRuntimePersister() {
return new JpaPersistingStateMachineInterceptor<>(jpaStateMachineRepository);
}
//end::snippetA[]
}
@Configuration
public static class ServiceConfig {
//tag::snippetC[]
//tag::snippetE[]
@Bean
public StateMachineService<States, Events> stateMachineService(StateMachineFactory<States, Events> stateMachineFactory,
public StateMachineService<States, Events> stateMachineService(
StateMachineFactory<States, Events> stateMachineFactory,
StateMachineRuntimePersister<States, Events, String> stateMachineRuntimePersister) {
return new DefaultStateMachineService<States, Events>(stateMachineFactory, stateMachineRuntimePersister);
}
//end::snippetC[]
//end::snippetE[]
}
public enum States {

View File

@@ -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