创建Spring Boot项目
定义
<groupId>com.zhun</groupId>
<artifactId>activiti-rest</artifactId>
<version>0.0.1-SNAPSHOT</version>
继承
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
依赖
<properties>
<java.version>1.8</java.version>
<!-- 数据库 Start -->
<mysql-connector-java.version>8.0.15</mysql-connector-java.version>
<spring-boot-alibaba-druid.version>1.1.16</spring-boot-alibaba-druid.version>
<mybatis-plus-boot.version>3.3.0</mybatis-plus-boot.version>
<!-- 数据库 End -->
<!-- Activiti Start -->
<activiti.version>6.0.0</activiti.version>
<!-- Activiti End -->
<swagger2.version>2.8.0</swagger2.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- web相关 Start-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
<!-- web相关 End-->
<!-- 数据库连接 Start -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${spring-boot-alibaba-druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-boot.version}</version>
</dependency>
<!-- 数据库连接 End -->
<!-- Activiti Start -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-rest-api</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- Activiti End -->
<!-- Swagger-ui Start -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
<!-- Swagger-ui End -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
入口文件
@SpringBootApplication(exclude = {
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
org.activiti.spring.boot.SecurityAutoConfiguration.class
})
public class ActivitiRestApplication {
public static void main(String[] args) {
SpringApplication.run(ActivitiRestApplication.class, args);
}
}
配置文件application.yml
server:
port: 8080
servlet:
context-path:
spring:
datasource:
druid:
url: jdbc:mysql://127.0.0.1:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
initial-size: 1
min-idle: 1
max-active: 20
test-on-borrow: true
driver-class-name: com.mysql.cj.jdbc.Driver
activiti:
check-process-definitions: false #自动检查、部署流程定义文件,若为true,则需要再指定目录
thymeleaf:
cache: false
mode: HTML
encoding: UTF-8
servlet:
content-type: text/html
- 自行创建Mysql数据库activiti
Activiti 配置文件
@ComponentScan(basePackages = {"org.activiti.rest"}, includeFilters = {
@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {
RestController.class})}, useDefaultFilters = false, lazyInit = false)
@Configuration
public class ActivitiConfig {
@Bean
public ProcessEngine processEngine(DataSourceTransactionManager transactionManager, DataSource dataSource) throws IOException {
SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
//自动部署已有的流程文件
Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourceLoader.CLASSPATH_URL_PREFIX + "processes/*.bpmn");
configuration.setTransactionManager(transactionManager);
// 执行工作流对应的数据源
configuration.setDataSource(dataSource);
// 是否自动创建流程引擎表
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
configuration.setDeploymentResources(resources);
//configuration.setDbIdentityUsed(false);
//configuration.setAsyncExecutorActivate(false);
// 流程历史等级
//configuration.setHistoryLevel(HistoryLevel.FULL);
// 流程图字体
configuration.setActivityFontName("宋体");
configuration.setAnnotationFontName("宋体");
configuration.setLabelFontName("宋体");
return configuration.buildProcessEngine();
}
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine) {
return processEngine.getRepositoryService();
}
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine) {
return processEngine.getRuntimeService();
}
@Bean
public TaskService taskService(ProcessEngine processEngine) {
return processEngine.getTaskService();
}
@Bean
public HistoryService historyService(ProcessEngine processEngine) {
return processEngine.getHistoryService();
}
@Bean
public ManagementService managementService(ProcessEngine processEngine) {
return processEngine.getManagementService();
}
@Bean
public IdentityService identityService(ProcessEngine processEngine) {
return processEngine.getIdentityService();
}
@Bean
public FormService formService(ProcessEngine processEngine) {
return processEngine.getFormService();
}
}
RestResponseFactory、ContentTypeResolver配置
@Configuration
public class RestConfiguration {
public RestConfiguration() {
}
@Bean
public RestResponseFactory restResponseFactory() {
RestResponseFactory restResponseFactory = new RestResponseFactory();
return restResponseFactory;
}
@Bean
public ContentTypeResolver contentTypeResolver() {
ContentTypeResolver resolver = new DefaultContentTypeResolver();
return resolver;
}
}
Swagger-ui配置
@Configuration
@EnableSwagger2
public class Swagger2Config {
// 定义分隔符
private static final String splitor = ";";
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(basePackage("org.activiti.rest"+ splitor +"com.zhun.activiti"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Activiti rest API")
.description("Activiti rest 接口文档")
.version("1.0")
.build();
}
/**
* 重写basePackage方法,使能够实现多包访问
* @author jinhaoxun
* @date 2019/1/26
* @param
*/
public static Predicate<RequestHandler> basePackage(final String basePackage) {
return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
}
private static Function<Class<?>, Boolean> handlerPackage(final String basePackage) {
return input -> {
// 循环判断匹配
for (String strPackage : basePackage.split(splitor)) {
boolean isMatch = input.getPackage().getName().startsWith(strPackage);
if (isMatch) {
return true;
}
}
return false;
};
}
private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
return Optional.fromNullable(input.declaringClass());
}
}
系统Api示例
@RestController
public class HelloWorldController {
@GetMapping("/")
public String index() {
return "hello world at home!";
}
}
启动项目,访问路径
http://localhost:8080/swagger-ui.html
效果图
扫描二维码关注公众号,回复: 9367452 查看本文章
码云地址
https://gitee.com/piaoyi95/activiti-rest