初始代码

This commit is contained in:
wangmingwei
2026-04-21 17:17:01 +08:00
parent eda24c90f4
commit cae1a85ba9
19 changed files with 2093 additions and 0 deletions

102
.gitignore vendored Normal file
View File

@@ -0,0 +1,102 @@
#======================================================================================================================
#========================================= gitignore的基础用法 =========================================
#======================================================================================================================
# 一.基础语法
# .gitignore配置文件的一些通用技巧 [参考:https://git-scm.com/docs/gitignore]
# 1.空白行不匹配任何文件,所以可以作为可读性的分隔符,同时两端的空格将会被忽略.
# 2.使用[#]开头,将会注释掉整行,使其不进行匹配操作,如果需要匹配#开头,可以使用转义字符[\].
# 3.1匹配模式以[/]结尾,表示想要匹配一个目录及其子文件.(比如[foo/]会匹配foo目录及其下面的路径.)
# 3.2匹配模式不包含[/],将会全局匹配该文件.
# 4.通配符
# [*]: 匹配除[/]以外的任何内容,也就意味着[*]不能跨目录.
# [?]: 匹配除[/]和[[]以及[]]以外的任何一个字符.
# [**]: 匹配所有的内容,或者说匹配任意目录下的内容.
# 示例:
# 1.[**/foo/bar] 将会匹配所有直接在foo目录下的bar,无论foo处在何处.
# 2.[foo/**]则表示匹配foo目录下的所有文件和目录.
# 3.[a/**/b]则可以匹配a/b, a/c/b, a/c/d/b,即此处的[**]可以表示0个或多个.
# !!! 需要注意的是,除上面示例的用法外,剩余的[**]都是无效的..
# 5.可以通过前缀[!]来表示不忽略某些文件,比如可以通过[!a]来确保文件a不会被忽略,即时前面已经声明了忽略其父目录,该模式优先级高于普通忽略模式.
# 二.常用命令
# 1.git -rm [https://git-scm.com/docs/git-rm]
# 删除文件索引,或者同时删除文件索引和物理文件.可以使用通配符.
# 2.git-check-ignore [https://git-scm.com/docs/git-check-ignore]
# 调试.gitignore文件
# 三.注意事项
# 1.如果文件已经被git管理,那么后续添加的忽略模式将不会生效,具体解决方法,参考<<二.常用命令>>.
#=======================================================================================================================
#============================== java忽略文件 =====================================
#===================== https://github.com/github/gitignore/blob/master/Java.gitignore ==================
#=======================================================================================================================
# 编译后的class文件,忽略所有以[.class]结尾的文件
*.class
# 日志文件,忽略所有以[.log]结尾的文件.
*.log
# BlueJ 文件,忽略所有以[.ctxt]结尾的文件.
*.ctxt
# Mobile Tools for Java (J2ME),忽略[.mtj.tmp/]目录及其子文件.
.mtj.tmp/
# 打包文件,忽略所有以[.jar]或[.war]或[.nar]或[.ear]或[.zip]或[.tar.gz]或[rar]结尾的文件.
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# 虚拟机崩溃日志,忽略所有以[hs_err_pid]开头的文件.[see http://www.java.com/en/download/help/error_hotspot.xml]
hs_err_pid*
#=======================================================================================================================
#============================== maven忽略文件 ===================================
#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ==================
#=======================================================================================================================
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
!/.mvn/wrapper/maven-wrapper.jar
#=======================================================================================================================
#============================== IDE环境忽略文件 ==================================
#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ==================
#=======================================================================================================================
#----------------IDEA-------------
.idea/*
.idea/compiler.xml
.idea/encodings.xml
.idea/modules.xml
*.iml
#=======================================================================================================================
#============================== other环境忽略文件 ================================
#===================== https://github.com/github/gitignore/blob/master/Maven.gitignore ==================
#=======================================================================================================================
*.sw?
.#*
*#
*~
.classpath
.project
.settings/
bin
build
target
dependency-reduced-pom.xml
*.sublime-*
/scratch
.gradle
Guardfile
README.html
*.iml
.idea
._*

22
Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# 基础镜像
FROM bellsoft/liberica-openjre-rocky:21
# FROM bellsoft/liberica-openjre-rocky:17
# FROM bellsoft/liberica-openjre-rocky:11
# FROM bellsoft/liberica-openjre-rocky:8
LABEL maintainer=yunzhupaas-team
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 指定运行时的工作目录
WORKDIR /data/yunzhupaassoft/flowApi
# 将构建产物jar包拷贝到运行时目录中
COPY yunzhupaas-workflow-admin/target/*.jar ./yunzhupaas-flow-admin.jar
# 指定容器内运行端口
EXPOSE 31000
# 指定容器启动时要运行的命令
ENTRYPOINT ["/bin/sh","-c","java -javaagent:./yunzhupaas-flow-admin.jar -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom --add-opens java.base/java.lang=ALL-UNNAMED -XX:+DisableAttachMechanism -jar yunzhupaas-flow-admin.jar"]

0
README
View File

295
README.md Normal file
View File

@@ -0,0 +1,295 @@
> 特别说明源码、JDK、数据库、Redis等安装或存放路径禁止包含中文、空格、特殊字符等
## 一 环境要求
### 1.1 开发环境
| 类目 | 版本说明或建议 |
| --- |------------------------|
| 硬件 | 开发电脑建议使用I3及以上CPU16G及以上内存 |
| 操作系统 | Windows 10/11MacOS |
| JDK | 默认使用JDK 21如需要切换JDK 8/11/17版本请参考文档调整代码推荐使用 `OpenJDK`,如 `Liberica JDK``Eclipse Temurin``Alibaba Dragonwell``BiSheng`等发行版;|
| Maven | 依赖管理工具,推荐使用 `3.6.3` 及以上版本 |
| 数据库 | 兼容 `MySQL 5.7.x/8.x``SQLServer 2012+``Oracle 11g``PostgreSQL 12+``达梦数据库(DM8)``人大金仓数据库(KingbaseES_V8R6)` |
| IDE | 代码集成开发环境,推荐使用 `IDEA2024` 及以上版本,兼容 `Eclipse``Spring Tool Suite` 等IDE工具 |
### 1.2 运行环境
> 适用于测试或生产环境
| 类目 | 版本说明或建议 |
| --- |-----------------------------------------------|
| 服务器配置 | 建议至少在 4C/16G/50G的机器配置下运行 |
| 操作系统 | 建议使用 `Windows Server 2019` 及以上版本或主流 `Linux` 发行版本,推荐使用 `Linux` 环境;兼容 `统信UOS``OpenEuler``麒麟服务器版` 等信创环境; |
| JRE | 默认使用JRE 21如需要切换JRE 8、11、17版本请参考文档调整代码推荐使用 `OpenJDK`,如 `Liberica JDK``Eclipse Temurin``Alibaba Dragonwell``BiSheng`等发行版; |
| 数据库 | 兼容 `MySQL 5.7.x/8.x``SQLServer 2012+``Oracle 11g``PostgreSQL 12+``达梦数据库(DM8)``人大金仓数据库(KingbaseES_V8R6)` |
## 二 关联项目
| 项目 | 分支 | 说明 |
|--------------------|---------------|------------|
| yunzhupaas-workflow-core | v1.0.0-stable | 流程引擎基础依赖 |
## 三 Maven私服配置
> Apache Maven 依赖管理工具,推荐使用 `3.6.3` 及以上版本<br>解决以下依赖无法从公共Maven仓库下载的问题
打开Maven安装目录中的 `conf/settings.xml` 文件,<br>
`<servers></servers>` 中添加如下内容
```xml
<server>
<id>maven-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
```
`<mirrors></mirrors>` 中添加
```xml
<mirror>
<id>maven-releases</id>
<mirrorOf>*</mirrorOf>
<name>maven-releases</name>
<url>https://repository.yunzhupaas.com/repository/maven-public/</url>
</mirror>
```
## 四 开发环境
### 4.1 导入数据库脚本
> 以 MySQL数据库 为例<br>字符集utf8mb4<br/>排序规则utf8mb4_general_ci
在MySQL创建 `yunzhupaas_flow` 数据库,并将 `yunzhupaas-database/MySQL/yunzhupaas_flow_init.sql` 导入;
### 4.2 导入依赖
详见 `yunzhupaas-workflow-core` 项目中的 `README.md` 文档说明
### 4.3 项目配置
打开编辑 `yunzhupaas-workflow-admin/src/main/resources/application.yml`
#### 4.3.1 指定环境配置
环境说明:
- `application-dev.yml` 开发环境(默认)
- `application-test.yml` 测试环境
- `application-preview.yml` 预发布环境
- `application-prod.yml` 生产环境
> 以开发环境为例,根据实际需求修改
```yaml
# application.yml第 6 行,可选值dev(开发环境-默认)、test(测试环境)、preview(预生产)、prod(生产环境)
active: dev
```
#### 4.3.2 调整运行端口
> 根据实际需求调整
打开编辑 `yunzhupaas-workflow-admin/src/main/resources/application-dev.yml`(第 2 行)
```yaml
port: 31000 # 默认运行端口
```
#### 4.3.3 数据库配置示例
打开编辑 `yunzhupaas-workflow-admin/src/main/resources/application-dev.yml`,修改以下配置
> 注意:
> - 若使用 `Oracle` 或 `达梦` 数据库必需配置模式名称
> - 若使用 `PostgreSQL` 和 `人大金仓KingbaseES` 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称
> - 若使用 `MySQL` 和 `SQLServer` 无需配置模式名称
##### 4.3.3.1 MySQL数据库
```yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.mysql.cj.jdbc.MysqlDataSource
url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true
username: dbuser
password: dbpasswd
```
##### 4.3.3.2 SQLServer数据库
```yaml
spring:
datasource:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
type: com.microsoft.sqlserver.jdbc.SQLServerDataSource
url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true
username: dbuser
password: dbpasswd
```
##### 4.3.3.3 Oracle数据库
> 必需配置模式名称
```yaml
flowable:
database-schema: YUNZHUPAAS_FLOW
spring:
datasource:
driver-class-name: oracle.jdbc.OracleDriver
type: oracle.jdbc.datasource.impl.OracleDataSource
url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL
username: YUNZHUPAAS_FLOW
password: dbpasswd
```
##### 4.3.3.4 PostgreSQL数据库
**若使用默认 `public` 模式**
```yaml
spring:
datasource:
driver-class-name: org.postgresql.Driver
type: org.postgresql.ds.PGSimpleDataSource
url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
username: dbuser
password: dbpasswd
```
**若使用其他模式**
```yaml
flowable:
database-schema: yunzhupaas_flow
spring:
datasource:
driver-class-name: org.postgresql.Driver
type: org.postgresql.ds.PGSimpleDataSource
url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
username: dbuser
password: dbpasswd
```
##### 4.3.3.5 达梦dm8数据库
> 必需配置模式名称,连接后面需要添加参数 ?compatibleMode=oracle
```yaml
flowable:
database-schema: YUNZHUPAAS_FLOW
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
type: dm.jdbc.driver.DmdbDataSource
url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle
username: dbuser
password: dbpasswd
```
##### 4.3.3.6 人大金仓KingbaseES数据库
**若使用默认 `public` 模式**
```yaml
spring:
datasource:
driver-class-name: org.postgresql.Driver
type: org.postgresql.ds.PGSimpleDataSource
url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
username: dbuser
password: dbpasswd
```
**若使用其他模式**
```yaml
flowable:
database-schema: yunzhupaas_flow
spring:
datasource:
driver-class-name: org.postgresql.Driver
type: org.postgresql.ds.PGSimpleDataSource
url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
username: dbuser
password: dbpasswd
```
### 4.4 执行调试或运行
#### 4.4.1 `yunzhupaas-workflow-core` 项目未使用加密
- 在IDEA中, 展开右侧 `Maven``Profiles` 去除勾选 `encrypted` 选项, 再点击 Maven `刷新` 图标刷新Maven
- 找到 `yunzhupaas-workflow-admin/src/main/java/yunzhupaas/YunzhupaasFlowableApplication.java`,右击运行即可。
若使用JDK9及以上版本在IDEA中打开 `Edit Configurations` VM启动参数添加如下参数
```bash
--add-opens java.base/java.lang=ALL-UNNAMED
```
#### 4.4.2 `yunzhupaas-workflow-core` 项目使用加密
- 在IDEA中展开右侧 `Maven` 中 `Profiles` 勾选 `encrypted` 选项, 再点击Maven `刷新` 图标刷新Maven
- 在IDEA中双击右侧 `Maven` 中 `yunzhupaas-workflow` > `clean` 将会自动安装加密打包插件, 并创建创建`yunzhupaas-workflow-admin/target/copylib` 复制依赖包用于下一步运行
**参数说明**
```bash
# 打开项目中`yunzhupaas-workflow-admin/target/copylib` 目录, 复制Jar包 `yunzhupaas-workflow-common-版本号.jar` 的文件名
-javaagent:项目存放路径/yunzhupaas-workflow-admin/target/copylib/yunzhupaas-workflow-common-当前版本号.jar(上面复制的文件名)="decryptProjectPathPrefix=yunzhupaas-workflow-common___yunzhupaas-workflow-flowable"
```
- 在IDEA中打开 `Edit Configurations` VM启动参数添加如下参数
若使用 JDK8 运行需要替换下方命令示例中的Jar包路径
``` bash
-XX:+DisableAttachMechanism
-javaagent:D:/Projects/IdeaProjects/yunzhupaas-workflow-boot/yunzhupaas-workflow-admin/target/copylib/yunzhupaas-workflow-common-1.0.0-RELEASE.jar="decryptProjectPathPrefix=yunzhupaas-workflow-common___yunzhupaas-workflow-flowable"
```
若使用JDK 9及以上版本需要替换下方命令示例中的Jar包路径
``` bash
--add-opens java.base/java.lang=ALL-UNNAMED
-XX:+DisableAttachMechanism
-javaagent:D:/Projects/IdeaProjects/yunzhupaas-workflow-boot/yunzhupaas-workflow-admin/target/copylib/yunzhupaas-workflow-common-1.0.0-RELEASE.jar="decryptProjectPathPrefix=yunzhupaas-workflow-common___yunzhupaas-workflow-flowable"
```
### 4.5 专业版用户
> 专业版用户无 `yunzhupaas-workflow-core` 项目
若使用 `JDK 8/11` 开发
- 首先全局搜索 `jakarta.` 批量替换为 `javax.`,
- 在本项目根目录打开 `pom.xml` 文件,注释第 92 行,解除注释第 94 行;
## 五 项目发布
### 5.1 `yunzhupaas-workflow-core` 项目未使用加密
- 在IDEA中, 展开右侧 `Maven` 中 `Profiles` 去除勾选 `encrypted` 选项, 再点击Maven `刷新` 图标刷新Maven
- 在IDEA中双击右侧Maven中 `yunzhupaas-workflow` > `Lifecycle` > `clean` 清理项目
- 在IDEA中双击右侧Maven中 `yunzhupaas-workflow` > `Lifecycle` > `package` 打包项目
- 打开 `yunzhupaas-workflow/yunzhupaas-workflow-admin/target`,将 `yunzhupaas-workflow-admin-1.0.0-RELEASE.jar` 上传至服务器
### 5.2 `yunzhupaas-workflow-core` 项目使用加密
- 在IDEA中, 展开右侧 `Maven` 中 `Profiles` 勾选 `encrypted` 选项, 再点击Maven `刷新` 图标刷新Maven
- 在IDEA中双击右侧 `Maven` > `yunzhupaas-workflow` > `clean` 将会自动安装加密打包插件
- 在IDEA中双击右侧 `Maven` > `yunzhupaas-workflow` > `Lifecycle` > `package` 打包项目
- 打开 `yunzhupaas-workflow/yunzhupaas-workflow-admin/target`,将 `yunzhupaas-workflow-admin-1.0.0-RELEASE.jar` 上传至服务器
- 启动命令
若使用 JDK/JRE 8 运行
```bash
java -javaagent:./yunzhupaas-workflow-admin-1.0.0-RELEASE.jar -XX:+DisableAttachMechanism -jar yunzhupaas-workflow-admin-1.0.0-RELEASE.jar
```
若使用 JDK/JRE 9及以上版本运行
```bash
java -javaagent:./yunzhupaas-workflow-admin-1.0.0-RELEASE.jar --add-opens java.base/java.lang=ALL-UNNAMED -XX:+DisableAttachMechanism -jar yunzhupaas-workflow-admin-1.0.0-RELEASE.jar
```

View File

@@ -0,0 +1,37 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.idea-aedi</groupId>
<artifactId>class-winter-core</artifactId>
<version>enhance-2.9.4</version>
<dependencies>
<dependency>
<groupId>com.idea-aedi</groupId>
<artifactId>class-winter-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
</project>

118
pom.xml Normal file
View File

@@ -0,0 +1,118 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>yunzhupaas-workflow</artifactId>
<packaging>pom</packaging>
<version>1.0.0-RELEASE</version>
<modules>
<module>yunzhupaas-workflow-admin</module>
</modules>
<parent>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-workflow-core</artifactId>
<version>1.0.0-RELEASE</version>
</parent>
<properties>
<snakeyaml.version>2.2</snakeyaml.version>
<mysql.version>8.3.0</mysql.version>
<oracle.version>21.9.0.0</oracle.version>
<dm18.version>8.1.3.140</dm18.version>
<sqlserver.version>12.6.1.jre8</sqlserver.version>
<postgre.version>42.6.2</postgre.version>
<gaussdb.version>6.0.0</gaussdb.version>
<highgo.version>42.5.0</highgo.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>${snakeyaml.version}</version>
</dependency>
<!-- Oracle-->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
<version>${oracle.version}</version>
</dependency>
<!-- dm -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>${dm18.version}</version>
</dependency>
<!--sqlserver-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>${sqlserver.version}</version>
</dependency>
<!--PostGre-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgre.version}</version>
</dependency>
<!--GaussDB-->
<!--<dependency>
<groupId>org.opengauss</groupId>
<artifactId>opengauss-jdbc</artifactId>
<version>${gaussdb.version}</version>
</dependency>-->
<!--HighgoDB-->
<!--<dependency>
<groupId>com.highgo</groupId>
<artifactId>hgdb-pgjdbc</artifactId>
<version>${highgo.version}</version>
</dependency>-->
</dependencies>
</dependencyManagement>
<profiles>
<profile>
<id>boot3</id>
<activation>
<jdk>[17,)</jdk>
</activation>
<properties>
<com.yunzhupaas.workflow.core.jdk.version></com.yunzhupaas.workflow.core.jdk.version>
</properties>
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
</profile>
<profile>
<id>boot2</id>
<activation>
<jdk>(,17)</jdk>
</activation>
<properties>
<com.yunzhupaas.workflow.core.jdk.version></com.yunzhupaas.workflow.core.jdk.version>
<!--若使用JDK8且无yunzhupaas-workflow-core项目源码 注释上方版本定义, 删除下方注释, 切换JDK8版本依赖-->
<!-- <com.yunzhupaas.workflow.core.jdk.version>-jdk8</com.yunzhupaas.workflow.core.jdk.version>-->
</properties>
<dependencyManagement>
<dependencies>
</dependencies>
</dependencyManagement>
</profile>
</profiles>
</project>

View File

@@ -0,0 +1,113 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yunzhupaas-workflow</artifactId>
<groupId>com.yunzhupaas</groupId>
<version>1.0.0-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>yunzhupaas-workflow-admin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- Oracle-->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.nls</groupId>
<artifactId>orai18n</artifactId>
</dependency>
<!-- dm -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
</dependency>
<!-- sqlserver -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<!--PostGre-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<!--GaussDB-->
<!--<dependency>
<groupId>org.opengauss</groupId>
<artifactId>opengauss-jdbc</artifactId>
</dependency>-->
<!--HighgoDB-->
<!--<dependency>
<groupId>com.highgo</groupId>
<artifactId>hgdb-pgjdbc</artifactId>
</dependency>-->
</dependencies>
<profiles>
<profile>
<id>flowable</id>
<activation>
<jdk>[,]</jdk>
</activation>
<dependencies>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-workflow-flowable${com.yunzhupaas.workflow.core.jdk.version}</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</profile>
<!--<profile>
<id>activiti</id>
<dependencies>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-workflow-activiti</artifactId>
<version>1.0.0-RELEASE</version>
</dependency>
</dependencies>
</profile>-->
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.yunzhupaas.FlowableApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,18 @@
package com.yunzhupaas;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 启动类
*
* @author YUNZHUPAAS FlowableYUNZHUPAAS开发组
* @version 1.0.0
* @since 2024/4/2 17:55
**/
@SpringBootApplication
public class FlowableApplication {
public static void main(String[] args) {
SpringApplication.run(FlowableApplication.class, args);
}
}

View File

@@ -0,0 +1,89 @@
package com.yunzhupaas.workflow.admin.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import com.yunzhupaas.workflow.admin.result.Result;
import com.yunzhupaas.workflow.common.exception.ResultCode;
import com.yunzhupaas.workflow.common.model.fo.DefinitionDeleteFo;
import com.yunzhupaas.workflow.common.model.fo.DefinitionDeployFo;
import com.yunzhupaas.workflow.common.model.vo.DefinitionVo;
import com.yunzhupaas.workflow.common.model.vo.DeploymentVo;
import com.yunzhupaas.workflow.common.service.IDefinitionService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 流程定义控制层
*
* @author YUNZHUPAAS FlowableYUNZHUPAAS开发组
* @version 1.0.0
* @since 2024/4/7 10:36
*/
@Slf4j
@Tag(name = "流程定义控制层", description = "DefinitionController")
@RestController
@RequestMapping("/api/Flow/definition")
@RequiredArgsConstructor
public class DefinitionController {
private final IDefinitionService definitionService;
/**
* 部署流程定义
*
* @param fo {@link DefinitionDeployFo}
* @return {@link Result<DeploymentVo>}
* @since 2024/4/7 13:39
**/
@Operation(summary = "deploy", description = "部署流程定义")
@PostMapping("/deploy")
public Result<DeploymentVo> deploy(@RequestBody @Valid DefinitionDeployFo fo) {
DeploymentVo vo = definitionService.deployDefinition(fo);
if (null != vo) {
return Result.success(vo);
}
return Result.failed(ResultCode.DEPLOY_FAILURE);
}
/**
* 列表查询流程定义
*
* @return {@link Result<List<DefinitionVo>>}
* @since 2024/4/7 13:39
**/
@Operation(summary = "list", description = "列表查询流程定义")
@GetMapping("/list")
public Result<List<DefinitionVo>> list() {
return Result.success(definitionService.listDefinition());
}
/**
* 删除流程定义
*
* @param fo {@link DefinitionDeleteFo}
* @return {@link Result<Boolean>}
* @since 2024/4/7 13:39
**/
@Operation(summary = "delete", description = "删除流程定义")
@DeleteMapping
public Result<Boolean> delete(@Valid DefinitionDeleteFo fo) {
if (definitionService.deleteDefinition(fo)) {
return Result.success(ResultCode.DELETE_SUCCESS);
}
return Result.failed(ResultCode.DELETE_FAILURE);
}
/**
* 获取流程元素
*
* @param deploymentId 部署ID
*/
@Operation(summary = "get", description = "获取流程元素")
@GetMapping("/{deploymentId}")
public Result getStructure(@PathVariable("deploymentId") String deploymentId) {
return Result.success(definitionService.getStructure(deploymentId));
}
}

View File

@@ -0,0 +1,77 @@
package com.yunzhupaas.workflow.admin.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import com.yunzhupaas.workflow.admin.result.Result;
import com.yunzhupaas.workflow.common.exception.ResultCode;
import com.yunzhupaas.workflow.common.model.fo.InstanceDeleteFo;
import com.yunzhupaas.workflow.common.model.fo.InstanceStartFo;
import com.yunzhupaas.workflow.common.model.vo.HistoricInstanceVo;
import com.yunzhupaas.workflow.common.model.vo.InstanceVo;
import com.yunzhupaas.workflow.common.service.IInstanceService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
/**
* 流程实例控制层
*
* @author YUNZHUPAAS FlowableYUNZHUPAAS开发组
* @version 1.0.0
* @since 2024/4/7 16:29
*/
@Slf4j
@Tag(name = "流程实例控制层", description = "InstanceController")
@RestController
@RequestMapping("/api/Flow/instance")
@RequiredArgsConstructor
public class InstanceController {
private final IInstanceService instanceService;
/**
* 启动流程实例
*
* @param fo {@link InstanceStartFo}
* @return {@link Result<InstanceVo>}
* @since 2024/4/7 17:35
**/
@Operation(summary = "start", description = "启动流程实例")
@PostMapping("/start")
public Result<InstanceVo> start(@RequestBody @Valid InstanceStartFo fo) {
InstanceVo vo = instanceService.startById(fo);
if (null != vo) {
return Result.success(vo);
}
return Result.failed(ResultCode.START_FAILURE);
}
/**
* 获取流程实例
*
* @param instanceId {@link String}
* @return {@link Result<HistoricInstanceVo>}
* @since 2024/4/7 18:17
**/
@Operation(summary = "get", description = "获取流程实例")
@GetMapping("/{instanceId}")
public Result<HistoricInstanceVo> getInstance(@PathVariable("instanceId") String instanceId) {
return Result.success(instanceService.getHistoricProcessInstance(instanceId));
}
/**
* 删除流程实例
*
* @param fo {@link InstanceDeleteFo}
* @return {@link Result<Boolean>}
* @since 2024/4/7 17:35
**/
@Operation(summary = "delete", description = "删除流程实例")
@DeleteMapping
public Result<Boolean> delete(InstanceDeleteFo fo) {
if (instanceService.deleteInstance(fo)) {
return Result.success(ResultCode.DELETE_SUCCESS);
}
return Result.failed(ResultCode.DELETE_FAILURE);
}
}

View File

@@ -0,0 +1,298 @@
package com.yunzhupaas.workflow.admin.controller;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import com.yunzhupaas.workflow.admin.result.Result;
import com.yunzhupaas.workflow.common.exception.ResultCode;
import com.yunzhupaas.workflow.common.model.fo.*;
import com.yunzhupaas.workflow.common.model.vo.HistoricNodeVo;
import com.yunzhupaas.workflow.common.model.vo.NodeElementVo;
import com.yunzhupaas.workflow.common.model.vo.TaskVo;
import com.yunzhupaas.workflow.common.service.ITaskService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 流程任务控制层
*
* @author YUNZHUPAAS FlowableYUNZHUPAAS开发组
* @version 1.0.0
* @since 2024/4/8 14:17
*/
@Slf4j
@Tag(name = "流程任务控制层", description = "TaskController")
@RestController
@RequestMapping("/api/Flow/task")
@RequiredArgsConstructor
public class TaskController {
private final ITaskService taskService;
/**
* 根据流程实例ID获取任务
*
* @param instanceId {@link String}
* @return {@link Result<List<TaskVo>>}
* @since 2024/4/8 15:10
**/
@Operation(summary = "list", description = "根据流程实例ID获取任务")
@GetMapping("/list/{instanceId}")
public Result<List<TaskVo>> list(@PathVariable("instanceId") String instanceId) {
return Result.success(taskService.getTask(instanceId));
}
/**
* 完成任务
*
* @param fo {@link TaskCompleteFo}
* @return {@link Result<Boolean>}
* @since 2024/4/8 15:10
**/
@Operation(summary = "complete", description = "完成任务")
@PostMapping("/complete")
public Result<Boolean> complete(@RequestBody @Valid TaskCompleteFo fo) {
if (taskService.complete(fo)) {
return Result.success(ResultCode.COMPLETE_SUCCESS);
}
return Result.failed(ResultCode.COMPLETE_FAILURE);
}
/**
* 单节点跳转多节点
*
* @param fo {@link MoveSingleToMultiFo}
* @return {@link Result<Boolean>}
* @since 2024/4/10 10:30
**/
@Operation(summary = "moveSingleToMulti", description = "单节点跳转多节点")
@PostMapping("/move/single/to/multi")
public Result<Boolean> moveSingleToMulti(@RequestBody @Valid MoveSingleToMultiFo fo) {
if (taskService.moveSingleToMulti(fo)) {
return Result.success(ResultCode.JUMP_SUCCESS);
}
return Result.failed(ResultCode.JUMP_FAILURE);
}
/**
* 多节点跳转单节点
*
* @param fo {@link MoveMultiToSingleFo}
* @return {@link Result<Boolean>}
* @since 2024/4/10 10:30
**/
@Operation(summary = "moveMultiToSingle", description = "多节点跳转单节点")
@PostMapping("/move/multi/to/single")
public Result<Boolean> moveMultiToSingle(@RequestBody @Valid MoveMultiToSingleFo fo) {
if (taskService.moveMultiToSingle(fo)) {
return Result.success(ResultCode.JUMP_SUCCESS);
}
return Result.failed(ResultCode.JUMP_FAILURE);
}
/**
* 节点跳转
*
* @param fo {@link JumpFo}
* @return {@link Result<Boolean>}
* @since 2024/4/10 11:50
**/
@Operation(summary = "jump", description = "节点跳转")
@PostMapping("/jump")
public Result<Boolean> jump(@RequestBody JumpFo fo) {
if (taskService.jump(fo)) {
return Result.success(ResultCode.JUMP_SUCCESS);
}
return Result.failed(ResultCode.JUMP_FAILURE);
}
/**
* 获取可回退的节点ID
*
* @param taskId {@link String}
* @return {@link Result<List<String>>}
* @since 2024/4/8 16:03
**/
@Operation(summary = "fallbacks", description = "获取可回退的节点ID")
@GetMapping("/fallbacks/{taskId}")
public Result<List<String>> fallbacks(@PathVariable("taskId") String taskId) {
return Result.success(taskService.getFallbacks(taskId));
}
/**
* 退回
*
* @param fo {@link TaskBackFo}
* @return {@link Result<List<String>>}
* @since 2024/4/9 9:27
**/
@Operation(summary = "back", description = "退回")
@PostMapping("/back")
public Result<List<String>> back(@RequestBody @Valid TaskBackFo fo) {
return Result.success(taskService.back(fo));
}
/**
* 获取上一级任务节点ID集合
*
* @param fo {@link TaskPrevFo}
* @return {@link Result<List<String>>}
* @since 2024/4/9 9:27
**/
@Operation(summary = "get", description = "获取上一级任务节点ID集合")
@GetMapping("/prev")
public Result<List<String>> getPrev(TaskPrevFo fo) {
return Result.success(taskService.getPrevUserTask(fo));
}
/**
* 获取下一级任务节点集合
*
* @param fo {@link TaskNextFo}
* @return {@link Result<List< NodeElementVo >>}
* @since 2024/4/9 9:27
**/
@Operation(summary = "get", description = "获取下一级任务节点集合")
@GetMapping("/next")
public Result<List<NodeElementVo>> getNext(TaskNextFo fo) {
return Result.success(taskService.getNextUserTask(fo));
}
/**
* 撤回
*
* @param taskId {@link String}
* @return {@link Result<Boolean>}
* @since 2024/4/9 11:08
**/
@Operation(summary = "retract", description = "撤回")
@PostMapping("/retract/{taskId}")
public Result<Boolean> retract(@PathVariable("taskId") String taskId) {
if (taskService.retract(taskId)) {
return Result.success(ResultCode.RETRACT_SUCCESS);
}
return Result.failed(ResultCode.RETRACT_FAILURE);
}
/**
* 获取出线Key集合若出线的出口为网关则一并获取网关的出线
*
* @param fo {@link TaskOutgoingFo}
* @return {@link Result<List<String>>}
* @since 2024/4/9 11:08
**/
@Operation(summary = "outgoingFlows", description = "获取出线Key集合若出线的出口为网关则一并获取网关的出线")
@GetMapping("/outgoing/flows")
public Result<List<String>> getOutgoingFlows(TaskOutgoingFo fo) {
return Result.success(taskService.getOutgoingFlows(fo));
}
/**
* 获取完成的节点Key
*
* @param instanceId {@link String}
* @return {@link Result<List<String>>}
* @since 2024/4/9 13:54
**/
@Operation(summary = "get", description = "获取完成的节点Key")
@GetMapping("/finished/keys/{instanceId}")
public Result<List<String>> getKeysOfFinished(@PathVariable("instanceId") String instanceId) {
return Result.success(taskService.getKeysOfFinished(instanceId));
}
/**
* 获取进线的Key
*
* @param taskId {@link String}
* @return {@link Result<List<String>>}
* @since 2024/4/9 13:58
**/
@Operation(summary = "get", description = "获取进线的Key")
@GetMapping("/incoming/flows/{taskId}")
public Result<List<String>> getIncomingFlows(@PathVariable("taskId") String taskId) {
return Result.success(taskService.getIncomingFlows(taskId));
}
/**
* 获取线之后的任务节点
*
* @param fo {@link FlowTargetTaskFo}
* @return {@link Result<String>}
* @since 2024/4/17 17:48
**/
@Operation(summary = "get", description = "获取线之后的任务节点")
@GetMapping("/flow/target")
public Result<List<String>> getTaskKeyAfterFlow(FlowTargetTaskFo fo) {
return Result.success(taskService.getTaskKeyAfterFlow(fo));
}
/**
* 获取未经过的节点
*
* @param instanceId {@link String}
* @return {@link Result<List<String>>}
* @since 2024/4/29 10:08
**/
@Operation(summary = "get", description = "获取未经过的节点")
@GetMapping("/tobe/pass/{instanceId}")
public Result<List<String>> getToBePass(@PathVariable("instanceId") String instanceId) {
return Result.success(taskService.getToBePass(instanceId));
}
/**
* 获取节点的后续节点
*
* @param fo 参数
*/
@Operation(summary = "get", description = "获取节点的后续节点")
@PostMapping("/after")
public Result<List<String>> getAfter(@RequestBody TaskAfterFo fo) {
return Result.success(taskService.getAfter(fo));
}
/**
* 异常补偿
*
* @param fo 参数
*/
@Operation(summary = "compensate", description = "异常补偿")
@PostMapping("/compensate")
public Result<List<TaskVo>> compensate(@RequestBody CompensateFo fo) {
return Result.success(taskService.compensate(fo));
}
/**
* 获取历史节点
*
* @param instanceId 实例主键
*/
@Operation(summary = "historic", description = "获取历史节点")
@GetMapping("/historic/{instanceId}")
public Result<List<HistoricNodeVo>> getHistoric(@PathVariable("instanceId") String instanceId) {
return Result.success(taskService.getHistoric(instanceId));
}
/**
* 获取历史结束节点
*
* @param instanceId 实例主键
*/
@Operation(summary = "historicEnd", description = "获取历史结束节点")
@GetMapping("/historic/end/{instanceId}")
public Result<List<String>> getHistoricEnd(@PathVariable("instanceId") String instanceId) {
return Result.success(taskService.getHistoricEnd(instanceId));
}
/**
* 获取元素信息
*
* @param model 参数
*/
@Operation(summary = "elementInfo", description = "获取元素信息")
@GetMapping("/element/info")
public Result getElementInfo(InfoModel model) {
return Result.success(taskService.getElementInfo(model));
}
}

View File

@@ -0,0 +1,61 @@
package com.yunzhupaas.workflow.admin.handle;
import jakarta.servlet.http.HttpServletRequest;
import com.yunzhupaas.workflow.admin.result.Result;
import com.yunzhupaas.workflow.common.exception.BizException;
import com.yunzhupaas.workflow.common.exception.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.support.DefaultMessageSourceResolvable;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
import java.util.stream.Collectors;
/**
* 全局异常处理
*
* @author YUNZHUPAAS FlowableYUNZHUPAAS开发组
* @version 1.0.0
* @since 2024/4/3 15:33
*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BindException.class)
public Result<?> bindExceptionHandler(BindException e) {
log.error("接口校验失败!原因是:{}", e.getMessage(), e);
List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
List<String> collect = fieldErrors.stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
String msg = String.join(",", collect);
return Result.failed(ResultCode.REQUEST_PARAM_IS_NULL, msg);
}
/**
* 处理空指针的异常
*/
@ExceptionHandler(value = NullPointerException.class)
public Result<?> exceptionHandler(HttpServletRequest req, NullPointerException e) {
log.error("发生空指针异常!原因是:{}", e.getMessage(), e);
return Result.failed(ResultCode.SYSTEM_EXECUTION_ERROR);
}
/**
* 处理自定义异常
*/
@ExceptionHandler(value = BizException.class)
public Result<?> exceptionHandler(HttpServletRequest req, BizException e) {
log.error("BizException原因是:{}", e.getMessage(), e);
return Result.failed(e.getResultCode(), e.getMessage());
}
@ExceptionHandler(Exception.class)
public Result<?> exceptionHandler(HttpServletRequest req, Exception e) {
log.error("未知异常!原因是:{}", e.getMessage(), e);
return Result.failed(e.getMessage());
}
}

View File

@@ -0,0 +1,96 @@
package com.yunzhupaas.workflow.admin.result;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.yunzhupaas.workflow.common.exception.ResultCode;
import lombok.Data;
import java.io.Serializable;
/**
* 统一返回结果类
*
* @author YUNZHUPAAS FlowableYUNZHUPAAS开发组
* @version 1.0.0
* @since 2024/4/3 15:00
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result<T> implements Serializable {
private Boolean success;
private String code;
private String msg;
private T data;
public static <T> Result<T> result(Boolean success, String code, String msg, T data) {
Result<T> result = new Result<>();
result.setSuccess(success);
result.setCode(code);
result.setMsg(msg);
result.setData(data);
return result;
}
public static <T> Result<T> result(Boolean success, ResultCode resultCode, T data) {
return result(success, resultCode.getCode(), resultCode.getMsg(), data);
}
public static <T> boolean isSuccess(Result<T> result) {
return result != null && ResultCode.SUCCESS.getCode().equals(result.getCode());
}
public static <T> Result<T> success() {
return result(true, ResultCode.SUCCESS, null);
}
public static <T> Result<T> success(T data) {
return result(true, ResultCode.SUCCESS, data);
}
public static <T> Result<T> success(ResultCode resultCode, T data) {
return result(true, resultCode, data);
}
public static <T> Result<T> success(ResultCode resultCode) {
return result(true, resultCode, null);
}
public static <T> Result<T> success(String code, String msg, T data) {
return result(true, code, msg, data);
}
public static <T> Result<T> success(String msg) {
return result(true, ResultCode.SUCCESS.getCode(), msg, null);
}
public static <T> Result<T> failed() {
return result(false, ResultCode.FAILURE.getCode(), ResultCode.FAILURE.getMsg(), null);
}
public static <T> Result<T> failed(T data) {
return result(false, ResultCode.FAILURE.getCode(), ResultCode.FAILURE.getMsg(), data);
}
public static <T> Result<T> failed(String msg) {
return result(false, ResultCode.FAILURE.getCode(), msg, null);
}
public static <T> Result<T> failed(String msg, T data) {
return result(false, ResultCode.FAILURE.getCode(), msg, data);
}
public static <T> Result<T> failed(ResultCode resultCode) {
return result(false, resultCode.getCode(), resultCode.getMsg(), null);
}
public static <T> Result<T> failed(ResultCode resultCode, T data) {
return result(false, resultCode.getCode(), resultCode.getMsg(), data);
}
public static <T> Result<T> failed(ResultCode resultCode, String msg) {
return result(false, resultCode.getCode(), msg, null);
}
public static <T> Result<T> failed(ResultCode resultCode, String msg, T data) {
return result(false, resultCode.getCode(), msg, data);
}
}

View File

@@ -0,0 +1,101 @@
server:
port: 31000
logging:
level:
root: info
org.flowable.engine.impl.persistence.entity.*: debug
org.flowable.task.service.impl.persistence.entity.*: debug
# 注意:
# 若使用 Oracle 或 达梦 数据库必需配置模式名称
# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称
# 若使用 MySQL 和 SQLServer 无需配置模式名称
#flowable:
# database-schema: YUNZHUPAAS_FLOW
# ===================== 1 若使用MySQL数据库-Start =====================
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.mysql.cj.jdbc.MysqlDataSource
url: jdbc:mysql://mysql.szlecheng.cn:13306/jnpfsoft_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: jnpfsoft_flow
password: C6J7BiD2bskYAwtZ
# ===================== 1 若使用MySQL数据库-End =======================
# ===================== 2 若使用SQLServer数据库-Start =====================
#spring:
# datasource:
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource
# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true
# username: sa
# password: 123456
# ===================== 2 若使用SQLServer数据库-End =======================
# ===================== 3 若使用Oracle数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: oracle.jdbc.OracleDriver
# type: oracle.jdbc.datasource.impl.OracleDataSource
# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL
# username: YUNZHUPAAS_FLOW
# password: dbpasswd
# ===================== 3 若使用Oracle数据库-End =======================
# ===================== 4 若使用PostgreSQL数据库-Start =====================
# ========== 4.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.1 若使用默认public模式-End ==========
# ========== 4.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.2 若使用其他模式-End ==========
# ===================== 4 若使用PostgreSQL数据库-End =======================
# ===================== 5 若使用达梦dm8数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: dm.jdbc.driver.DmDriver
# type: dm.jdbc.driver.DmdbDataSource
# # 连接后面需要添加参数 ?compatibleMode=oracle
# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle
# username: dbuser
# password: dbpasswd
# ===================== 5 若使用达梦dm8数据库-End =======================
# ===================== 6 若使用人大金仓KingbaseES数据库-Start =====================
# ========== 6.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.1 若使用默认public模式-End ==========
# ========== 6.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.2 若使用其他模式-End ==========
# ===================== 6 若使用人大金仓KingbaseES数据库-End =======================

View File

@@ -0,0 +1,101 @@
server:
port: 31000
logging:
level:
root: info
org.flowable.engine.impl.persistence.entity.*: debug
org.flowable.task.service.impl.persistence.entity.*: debug
# 注意:
# 若使用 Oracle 或 达梦 数据库必需配置模式名称
# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称
# 若使用 MySQL 和 SQLServer 无需配置模式名称
#flowable:
# database-schema: YUNZHUPAAS_FLOW
# ===================== 1 若使用MySQL数据库-Start =====================
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.mysql.cj.jdbc.MysqlDataSource
url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true
username: root
password: 123456
# ===================== 1 若使用MySQL数据库-End =======================
# ===================== 2 若使用SQLServer数据库-Start =====================
#spring:
# datasource:
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource
# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true
# username: sa
# password: 123456
# ===================== 2 若使用SQLServer数据库-End =======================
# ===================== 3 若使用Oracle数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: oracle.jdbc.OracleDriver
# type: oracle.jdbc.datasource.impl.OracleDataSource
# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL
# username: YUNZHUPAAS_FLOW
# password: dbpasswd
# ===================== 3 若使用Oracle数据库-End =======================
# ===================== 4 若使用PostgreSQL数据库-Start =====================
# ========== 4.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.1 若使用默认public模式-End ==========
# ========== 4.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.2 若使用其他模式-End ==========
# ===================== 4 若使用PostgreSQL数据库-End =======================
# ===================== 5 若使用达梦dm8数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: dm.jdbc.driver.DmDriver
# type: dm.jdbc.driver.DmdbDataSource
# # 连接后面需要添加参数 ?compatibleMode=oracle
# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle
# username: dbuser
# password: dbpasswd
# ===================== 5 若使用达梦dm8数据库-End =======================
# ===================== 6 若使用人大金仓KingbaseES数据库-Start =====================
# ========== 6.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.1 若使用默认public模式-End ==========
# ========== 6.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.2 若使用其他模式-End ==========
# ===================== 6 若使用人大金仓KingbaseES数据库-End =======================

View File

@@ -0,0 +1,101 @@
server:
port: 31000
logging:
level:
root: info
org.flowable.engine.impl.persistence.entity.*: debug
org.flowable.task.service.impl.persistence.entity.*: debug
# 注意:
# 若使用 Oracle 或 达梦 数据库必需配置模式名称
# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称
# 若使用 MySQL 和 SQLServer 无需配置模式名称
#flowable:
# database-schema: YUNZHUPAAS_FLOW
# ===================== 1 若使用MySQL数据库-Start =====================
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.mysql.cj.jdbc.MysqlDataSource
url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true
username: root
password: 123456
# ===================== 1 若使用MySQL数据库-End =======================
# ===================== 2 若使用SQLServer数据库-Start =====================
#spring:
# datasource:
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource
# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true
# username: sa
# password: 123456
# ===================== 2 若使用SQLServer数据库-End =======================
# ===================== 3 若使用Oracle数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: oracle.jdbc.OracleDriver
# type: oracle.jdbc.datasource.impl.OracleDataSource
# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL
# username: YUNZHUPAAS_FLOW
# password: dbpasswd
# ===================== 3 若使用Oracle数据库-End =======================
# ===================== 4 若使用PostgreSQL数据库-Start =====================
# ========== 4.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.1 若使用默认public模式-End ==========
# ========== 4.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.2 若使用其他模式-End ==========
# ===================== 4 若使用PostgreSQL数据库-End =======================
# ===================== 5 若使用达梦dm8数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: dm.jdbc.driver.DmDriver
# type: dm.jdbc.driver.DmdbDataSource
# # 连接后面需要添加参数 ?compatibleMode=oracle
# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle
# username: dbuser
# password: dbpasswd
# ===================== 5 若使用达梦dm8数据库-End =======================
# ===================== 6 若使用人大金仓KingbaseES数据库-Start =====================
# ========== 6.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.1 若使用默认public模式-End ==========
# ========== 6.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.2 若使用其他模式-End ==========
# ===================== 6 若使用人大金仓KingbaseES数据库-End =======================

View File

@@ -0,0 +1,101 @@
server:
port: 31000
logging:
level:
root: info
org.flowable.engine.impl.persistence.entity.*: debug
org.flowable.task.service.impl.persistence.entity.*: debug
# 注意:
# 若使用 Oracle 或 达梦 数据库必需配置模式名称
# 若使用 PostgreSQL 和 人大金仓KingbaseES 数据库, 默认public模式无需配置模式名称, 若指定模式需要配置模式名称
# 若使用 MySQL 和 SQLServer 无需配置模式名称
#flowable:
# database-schema: YUNZHUPAAS_FLOW
# ===================== 1 若使用MySQL数据库-Start =====================
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.mysql.cj.jdbc.MysqlDataSource
url: jdbc:mysql://127.0.0.1:3306/yunzhupaas_flow?yunzhupaasDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true
username: root
password: 123456
# ===================== 1 若使用MySQL数据库-End =======================
# ===================== 2 若使用SQLServer数据库-Start =====================
#spring:
# datasource:
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# type: com.microsoft.sqlserver.jdbc.SQLServerDataSource
# url: jdbc:sqlserver://127.0.0.1:1433;databaseName=yunzhupaas_flow;trustServerCertificate=true
# username: sa
# password: 123456
# ===================== 2 若使用SQLServer数据库-End =======================
# ===================== 3 若使用Oracle数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: oracle.jdbc.OracleDriver
# type: oracle.jdbc.datasource.impl.OracleDataSource
# url: jdbc:oracle:thin:@127.0.0.1:1521:ORCL
# username: YUNZHUPAAS_FLOW
# password: dbpasswd
# ===================== 3 若使用Oracle数据库-End =======================
# ===================== 4 若使用PostgreSQL数据库-Start =====================
# ========== 4.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.1 若使用默认public模式-End ==========
# ========== 4.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 4.2 若使用其他模式-End ==========
# ===================== 4 若使用PostgreSQL数据库-End =======================
# ===================== 5 若使用达梦dm8数据库-Start =====================
#flowable:
# database-schema: YUNZHUPAAS_FLOW
#spring:
# datasource:
# driver-class-name: dm.jdbc.driver.DmDriver
# type: dm.jdbc.driver.DmdbDataSource
# # 连接后面需要添加参数 ?compatibleMode=oracle
# url: jdbc:dm://127.0.0.1:5236/YUNZHUPAAS_FLOW?compatibleMode=oracle
# username: dbuser
# password: dbpasswd
# ===================== 5 若使用达梦dm8数据库-End =======================
# ===================== 6 若使用人大金仓KingbaseES数据库-Start =====================
# ========== 6.1 若使用默认public模式-Start ==========
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.1 若使用默认public模式-End ==========
# ========== 6.2 若使用其他模式-Start ==========
#flowable:
# database-schema: yunzhupaas_flow
#spring:
# datasource:
# driver-class-name: org.postgresql.Driver
# type: org.postgresql.ds.PGSimpleDataSource
# url: jdbc:postgresql://127.0.0.1:5432/yunzhupaas_flow
# username: dbuser
# password: dbpasswd
# ========== 6.2 若使用其他模式-End ==========
# ===================== 6 若使用人大金仓KingbaseES数据库-End =======================

View File

@@ -0,0 +1,24 @@
spring:
application:
name: yunzhupaas-workflow
profiles:
# 指定环境配置 dev(开发环境-默认)、test(测试环境)、preview(预生产)、prod(生产环境)
active: dev
main:
allow-bean-definition-overriding: true
allow-circular-references: true
logging:
config: classpath:logback-spring.xml
springdoc:
default-flat-param-object: true
api-docs:
enabled: true
#SpringDoc增强
#knife4j:
# basic: #接口文档访问鉴权
# enable: true
# username: yunzhupaas
# password: 123456
# enable: true

View File

@@ -0,0 +1,339 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--日志格式应用spring boot默认的格式也可以自己更改-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="FILE_LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n" />
<springProperty scope="context" name="SERVICE_NAME" source="spring.application.name" defaultValue="yunzhupaas"/>
<!--定义日志存放的位置,默认存放在项目启动的相对路径的目录-->
<springProperty scope="context" name="LOG_PATH" source="log.path" defaultValue="log/${SERVICE_NAME}"/>
<!-- 全局日志等级 -->
<springProperty scope="context" name="LOG_LEVEL_ROOT" source="log.level.root" defaultValue="INFO"/>
<!-- 服务自定义等级 如需自定义服务日志等级 修改下方的【自定义服务名】与nacos上的log.level.自定义服务名=等级 -->
<springProperty scope="context" name="LOG_LEVEL" source="log.level.yunzhupaas-boot" defaultValue="${LOG_LEVEL_ROOT}"/>
<!-- 日志记录器日期滚动记录level为 ERROR 日志 -->
<appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/log_error.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/error/%d{yyyy-MM-dd,aux}/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志最大的历史7天-->
<maxHistory>7</maxHistory>
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始
命名日志文件例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录error级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志记录器日期滚动记录level为 INFO 日志 -->
<appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/log_info.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/info/%d{yyyy-MM-dd,aux}/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志最大的历史7天-->
<maxHistory>7</maxHistory>
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始
命名日志文件例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志记录器日期滚动记录level为 WARN 日志 -->
<appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/log_warn.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/warn/%d{yyyy-MM-dd,aux}/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志最大的历史7天-->
<maxHistory>7</maxHistory>
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始
命名日志文件例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志记录器日期滚动记录level为 DEBUG 日志 -->
<appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/log_debug.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/debug/%d{yyyy-MM-dd,aux}/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志最大的历史7天-->
<maxHistory>7</maxHistory>
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始
命名日志文件例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录debug级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 日志记录器,日期滚动记录,所有日志 -->
<appender name="FILE_ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/log_total.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/total/%d{yyyy-MM-dd,aux}/log-total-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志最大的历史7天-->
<maxHistory>7</maxHistory>
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始
命名日志文件例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- 日志记录器日期滚动记录level 根据配置动态输出日志 -->
<appender name="FILE_RELEASE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${LOG_PATH}/log_release.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 归档的日志文件的路径,%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
<fileNamePattern>${LOG_PATH}/release/%d{yyyy-MM-dd,aux}/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志最大的历史7天-->
<maxHistory>7</maxHistory>
<!-- 除按日志记录之外还配置了日志文件不能超过2M若超过2M日志文件会以索引0开始
命名日志文件例如log-error-2013-12-21.0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录warn级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>${LOG_LEVEL}</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 异步输出 DEBUG -->
<appender name="ASYNC_FILE_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="FILE_DEBUG"/>
</appender>
<!-- 异步输出 INFO -->
<appender name="ASYNC_FILE_INFO" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="FILE_INFO"/>
</appender>
<!-- 异步输出 WARN -->
<appender name="ASYNC_FILE_WARN" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="FILE_WARN"/>
</appender>
<!-- 异步输出 ERROR -->
<appender name="ASYNC_FILE_ERROR" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="FILE_ERROR"/>
</appender>
<!-- 异步输出 ALL -->
<appender name="ASYNC_FILE_ALL" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="FILE_ALL"/>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- 异步输出 控制台 -->
<appender name="ASYNC_STDOUT" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="STDOUT"/>
</appender>
<!--<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
&lt;!&ndash; 必填目标LogStash的 IP:Port &ndash;&gt;
<destination>192.168.0.50:50000</destination>
&lt;!&ndash; 可选:保持程序存活时间 &ndash;&gt;
<keepAliveDuration>5 minutes</keepAliveDuration>
&lt;!&ndash; 可选:重连延迟时长 &ndash;&gt;
<reconnectionDelay>10 second</reconnectionDelay>
&lt;!&ndash; 可选:等待策略 &ndash;&gt;
<waitStrategyType>sleeping</waitStrategyType>
&lt;!&ndash; ============ encoder必须配置,有多种可选 ============= &ndash;&gt;
&lt;!&ndash; 编码器二LoggingEventCompositeJsonEncoder &ndash;&gt;
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
&lt;!&ndash; 时间戳:时区 &ndash;&gt;
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
&lt;!&ndash; 模式 &ndash;&gt;
<pattern>
<pattern>
{
"severity": "%level",
"service": "${SERVICE_NAME:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"msg": "%message"
&lt;!&ndash;"idx_pre": "elk-original-third-access",&ndash;&gt;
&lt;!&ndash;"json": "#asJson{%message}" 这个asJson可以把对应的字符串作为json对象取出来这样es可以对json里面的字段索引了&ndash;&gt;
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>-->
<root level="${LOG_LEVEL}">
<appender-ref ref="ASYNC_STDOUT"/>
<appender-ref ref="ASYNC_FILE_ERROR"/>
<appender-ref ref="ASYNC_FILE_INFO"/>
<appender-ref ref="ASYNC_FILE_WARN"/>
<appender-ref ref="ASYNC_FILE_DEBUG"/>
<appender-ref ref="ASYNC_FILE_ALL"/>
<!--<appender-ref ref="LOGSTASH"/>-->
</root>
</configuration>