后端
# 环境要求
- SpringBoot2版本使用JDK8;SpringBoot3版本使用JDK17
- 数据库:mysql8
- Redis:设置持久化,防止数据丢失
# 注意
- 修改数据库地址、端口(作者用的3307)、账号、密码
- 修改redis的地址和密码。作者的redis没有设置密码,所以无需设置
- 数据库url后面的一系列参数不要随便修改,否则会导致Flowable无法自动建表
- 若是mysql数据库,建议数据库隔离级别改为
R-C
模式,减少锁竞争,提高并发;若数据库隔离级别非R-C
模式(比如R-R
),打开项目代码cc.flyflow.core.service.impl.FlowServiceImpl#start
,将Lock4J
注解打开,保证有序,防止并发导致死锁
# 安装
- 新建数据库
flyflow
,编码:utf8mb4
- 将项目根目录下
sql
文件夹的sql文件在flyflow
数据库执行:新用户只需要执行all.sql
一个文件即可 - 根据实际情况修改项目
web
下的文件application.yml
的信息
spring:
elasticsearch:
# bboss:
# elasticsearch:
# showTemplate: true
# rest:
# hostNames: 127.0.0.1:9200
mvc:
pathmatch:
matching-strategy: ant_path_matcher
data:
redis:
##redis地址
host: localhost
##redis端口
port: 6379
##使用的db
database: 13
password: 123456
servlet:
multipart:
max-file-size: 50MB
max-request-size: 50MB
application:
name: FlyFlow
datasource:
url: jdbc:mysql://localhost:3307/flyflow_pro_sp3_ui?allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
##数据库账号
username: root
##数据库密码
password: 123456
hikari:
connection-timeout: 10000
validation-timeout: 3000
idle-timeout: 60000
login-timeout: 5
max-lifetime: 60000
maximum-pool-size: 5
minimum-idle: 5
read-only: false
jackson:
#字段为null时不返回该字段
default-property-inclusion: non_null
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
deserialization:
fail-on-unknown-properties: false
##允许端口
server:
port: 26859
##启用的日志文件
logging:
config: classpath:logback.xml
## 此处是存储在本地磁盘上,建议正式环境对接到oss等文件服务器上
file:
##静态文件在磁盘位置,此处与nginx配置要一直
dir: /flyflow/files
##静态文件访问路径
showUrl: http://127.0.0.1:${server.port}/file/show
# 不需要表单引擎 idm引擎
flowable:
common:
app:
idm-url: /a.html
idm-admin:
user: a
password: a
form:
enabled: false
idm:
enabled: false
async-executor-activate: true
sa-token:
# token名称 (同时也是cookie名称)
token-name: Authorization
# token有效期,单位s 默认30天, -1代表永不过期
timeout: 86400
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
active-timeout: 3600
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: false
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# token风格
token-style: uuid
# 是否输出操作日志
is-log: true
##部门的根节点id 默认是0
dept:
rootId: 0
##流程的数据api开关
api:
ori: local
http:
baseUrl: http://127.0.0.1:33333/flyflow
#ko-time:
# pointcut: execution(public * cc.flyflow.web.controller.*.*(..))
# log-enable: false
# saver: redis
# data-prefix: kotime
## 是否每个用户都是所有的权限
role:
allPermission: false
##账号密码登录页面:是否开启验证码
login:
captcha: true
## 是否允许跨域
cors:
enable: false
# springdoc-openapi项目配置
springdoc:
swagger-ui:
path: /swagger-ui.html
tags-sorter: alpha
operations-sorter: alpha
api-docs:
path: /v3/api-docs
group-configs:
- group: 'default'
paths-to-match: '/**'
packages-to-scan: cc.flyflow.web.controller
# knife4j的增强配置,不需要增强可以不配
knife4j:
enable: true
setting:
language: zh_cn
## 认证方式 如果是web 则是satoken拦截器拦截请求头实现 如果是custom的方式 则是header的传入jwt方式验证
auth:
# cc.flyflow.common.constants.FlyFlowConstant.UserAuthType
type: web
# type=custom限制客户端访问的ip地址 必填
ipList:
- 127.0.0.1
##报表配置
report:
enable: true
# 存储介质
store: mysql
- 打开文件
WebApp
启动即可
# 优化方案
- 在监听Flowable的变量变化事件中,本人使用了自写的的队列来实现异步解耦,建议使用
Rocketmq
(顺序模式)来实现异步解耦,这样会更稳定,而且效率更高 - 记录API日志也是自己写的,也可以使用
Rocketmq
来实现,这样会更稳定,而且效率更高 - 发送消息是通过多线程实现的,也建议使用
Rocketmq
来实现,这样会更稳定,而且效率更高 - 上述三处代码位置如下:
cc/flyflow/core/listeners/event_listener_impl/VariableUpdatedEventListener.java:41
cc/flyflow/biz/utils/ApiLogUtil.java:42
cc/flyflow/biz/middle/AsyncHanler.java:52
# 打包部署
- 一定要在最外层的POM文件
clean
package
- 一定要在最外层的POM文件
clean
package
- 一定要在最外层的POM文件
clean
package
- 本地项目启动用到的配置文件默认是
application.yml
,如果想区分不同环境,可以建立不同的配置文件,比如项目中的pro配置文件application-pro.yml
,项目启动的时候指定配置文件:java -jar xxx.jar --spring.profiles.active=pro