商业版-后端

# 环境要求

  1. SpringBoot3版本使用JDK17
  2. 数据库:mysql8
  3. Redis:设置持久化,防止数据丢失

# 注意

  1. 修改数据库地址、端口(作者用的3307)、账号、密码
  2. 修改redis的地址和密码。作者的redis没有设置密码,所以无需设置
  3. 数据库url后面的一系列参数不要随便修改,否则会导致Flowable无法自动建表
  4. 若是mysql数据库,建议数据库隔离级别改为R-C模式,减少锁竞争,提高并发,防止死锁(mysql默认是R-R

# 安装

  1. 新建数据库flyflow,编码:utf8mb4
  2. 将项目根目录下sql文件夹的sql文件在flyflow数据库执行:新用户只需要执行all.sqlflowable.sql两个sql文件即可
  3. 根据实际情况修改项目web下的文件application.yml的信息
  4. 本人已维护2025年节假日调休的数据,后续年份需要自己维护表flyflow_work_date数据
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


##文件存储
##使用的事x-file-storage  参考这里:https://x-file-storage.xuyanwu.cn/#/%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8
dromara:
  x-file-storage: #文件存储配置
    default-platform: local-plus-1 #默认使用的存储平台
    local-plus:
      - platform: local-plus-1 # 存储平台标识
        enable-storage: true  #启用存储
        enable-access: true #启用访问(线上请使用 Nginx 配置,效率更高)
        domain: http://127.0.0.1:${server.port}/file/show/ # 访问域名,例如:“http://127.0.0.1:8030/file/”,注意后面要和 path-patterns 保持一致,“/”结尾,本地存储建议使用相对路径,方便后期更换域名
        base-path:  # 基础路径
        path-patterns: /file/show/** # 访问路径
        storage-path: /flyflow/files/ # 存储路径



#  不需要表单引擎 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: true
  # 在多人登录同一账号时,是否共用一个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
##租户配置
tenant:
  enable: true
  ##默认租户值  如果不使用租户 默认租户值改为1  因为sql脚本的初始化租户是1 这里用-1是为了检查是否有遗漏租户配置的地方 可以报错发现问题
  default-value: 1

  1. 打开文件WebApp启动即可

# 优化方案

  1. 在监听Flowable的变量变化事件中,本人使用了自写的的队列来实现异步解耦,建议使用Rocketmq(顺序模式)来实现异步解耦,这样会更稳定,而且效率更高
  2. 记录API日志也是自己写的,也可以使用Rocketmq(顺序模式)来实现,这样会更稳定,而且效率更高
  3. 发送消息是通过多线程实现的,也建议使用Rocketmq(顺序模式)来实现,这样会更稳定,而且效率更高
  4. 上述三处代码位置如下:
    cc/flyflow/core/listeners/event_listener_impl/VariableUpdatedEventListener.java:41

cc/flyflow/biz/utils/ApiLogUtil.java:42

cc/flyflow/biz/middle/AsyncHanler.java:52

  1. 修改文件上传方式为OSS:点击查看 (opens new window);本项目中使用的是x-file-storage来上传文件,具体如何对接各种OSS,请去官网查看点击查看 (opens new window)

# 打包部署

  1. 一定要在最外层的POM文件clean package
  2. 一定要在最外层的POM文件clean package
  3. 一定要在最外层的POM文件clean package
  4. 本地项目启动用到的配置文件默认是application.yml,如果想区分不同环境,可以建立不同的配置文件,比如项目中的pro配置文件application-pro.yml,项目启动的时候指定配置文件:java -jar xxx.jar --spring.profiles.active=pro