开始
what?
how?
why?
模块
下表描述了可用于 Spring Statemachine 的模块。
模块 | 描述 |
---|---|
|
Spring Statemachine 的核心系统。 |
|
不需要核心之外依赖项的常见配方 框架。 |
|
|
|
的通用支持模块 。 |
|
的支持模块 。 |
|
的支持模块 。 |
|
的支持模块 。 |
|
分布式状态机的 Zookeeper 集成。 |
|
用于状态机测试的支持模块。 |
|
Spring Cloud Cluster 的支持模块。 请注意,Spring Cloud Cluster 已被 Spring Integration 取代。 |
|
使用 Eclipse Papyrus 进行 UI UML 建模的支持模块。 |
|
Spring Boot 的支持模块。 |
|
物料清单 pom. |
|
Spring Boot Starters。 |
使用 Gradle
下面的清单显示了通过在 https://start.spring.io 中选择各种设置创建的典型文件:build.gradle
buildscript {
ext {
springBootVersion = '3.1.6'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
ext {
springStatemachineVersion = '4.0.0'
}
dependencies {
compile('org.springframework.statemachine:spring-statemachine-starter')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
imports {
mavenBom "org.springframework.statemachine:spring-statemachine-bom:${springStatemachineVersion}"
}
}
替换为您要使用的版本。0.0.1-SNAPSHOT |
使用正常的项目结构,您可以使用以下命令构建此项目:
# ./gradlew clean build
预期的 Spring Boot 打包的胖 jar 将是 。build/libs/demo-0.0.1-SNAPSHOT.jar
您不需要 'libs-milestone' 和存储库
生产开发。libs-snapshot |
使用 Maven
以下示例显示了一个典型文件,该文件是通过在 https://start.spring.io 处选择各种选项创建的:pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>gs-statemachine</name>
<description>Demo project for Spring Statemachine</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-statemachine.version>4.0.0</spring-statemachine.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.statemachine</groupId>
<artifactId>spring-statemachine-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.statemachine</groupId>
<artifactId>spring-statemachine-bom</artifactId>
<version>${spring-statemachine.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
替换为您要使用的版本。0.0.1-SNAPSHOT |
使用正常的项目结构,您可以使用以下命令构建此项目:
# mvn clean package
预期的 Spring Boot 打包的 fat-jar 将是 .target/demo-0.0.1-SNAPSHOT.jar
您不需要 和 repositories
生产开发。libs-milestone libs-snapshot |
开发您的第一个 Spring Statemachine 应用程序
您可以从创建一个简单的 Spring Boot 类开始
实现 .以下示例显示了如何执行此操作:Application
CommandLineRunner
@SpringBootApplication
public class Application implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
然后,您需要添加状态和事件,如下例所示:
public enum States {
SI, S1, S2
}
public enum Events {
E1, E2
}
然后你需要添加状态机配置,如下例所示:
@Configuration
@EnableStateMachine
public class StateMachineConfig
extends EnumStateMachineConfigurerAdapter<States, Events> {
@Override
public void configure(StateMachineConfigurationConfigurer<States, Events> config)
throws Exception {
config
.withConfiguration()
.autoStartup(true)
.listener(listener());
}
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(States.SI)
.states(EnumSet.allOf(States.class));
}
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
throws Exception {
transitions
.withExternal()
.source(States.SI).target(States.S1).event(Events.E1)
.and()
.withExternal()
.source(States.S1).target(States.S2).event(Events.E2);
}
@Bean
public StateMachineListener<States, Events> listener() {
return new StateMachineListenerAdapter<States, Events>() {
@Override
public void stateChanged(State<States, Events> from, State<States, Events> to) {
System.out.println("State change to " + to.getId());
}
};
}
}
然后,您需要 implement 和 autowire 。
以下示例显示了如何执行此操作:CommandLineRunner
StateMachine
@Autowired
private StateMachine<States, Events> stateMachine;
@Override
public void run(String... args) throws Exception {
stateMachine.sendEvent(Events.E1);
stateMachine.sendEvent(Events.E2);
}
根据您是使用 还是 构建应用程序 ,
您可以分别使用 或 来运行它。Gradle
Maven
java -jar build/libs/gs-statemachine-0.1.0.jar
java -jar target/gs-statemachine-0.1.0.jar
此命令的结果应该是正常的 Spring Boot 输出。 但是,您还应该找到以下几行:
State change to SI
State change to S1
State change to S2
这些线条表示您构建的机器 正在从一个状态移动到另一个状态,这是它应该做的。