Camunda Modeler给流程模型设置流程变量及默认值

2023-11-07

        如下图所示,在提单页面,发起人需要手动选择走部门内分组审核还是部门负责人审核,对于这种由发起人选择走不同分支的且分支条件不是来自业务系统的情形,需要在流程模型上设置变量并赋初始化值,下面介绍如何设置及使用。

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0kg5kad" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.9.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
  <bpmn:process id="Process_Demo11" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1" name="开始事件" camunda:initiator="starter">
      <bpmn:outgoing>Flow_1w8hx7u</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_1w8hx7u" sourceRef="StartEvent_1" targetRef="Activity_1drnsx4" />
    <bpmn:userTask id="Activity_06ntta4" name="起草" camunda:assignee="${starter}">
      <bpmn:incoming>Flow_06hawzz</bpmn:incoming>
      <bpmn:outgoing>Flow_1us3p2e</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_1us3p2e" sourceRef="Activity_06ntta4" targetRef="Gateway_0a7spma" />
    <bpmn:inclusiveGateway id="Gateway_0a7spma" name="发起人选择">
      <bpmn:incoming>Flow_1us3p2e</bpmn:incoming>
      <bpmn:outgoing>Flow_0dm15h8</bpmn:outgoing>
      <bpmn:outgoing>Flow_1d5313z</bpmn:outgoing>
    </bpmn:inclusiveGateway>
    <bpmn:sequenceFlow id="Flow_0dm15h8" name="1" sourceRef="Gateway_0a7spma" targetRef="Activity_1h2epaw">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${para_var.indexOf("1") &gt; -1}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:exclusiveGateway id="Gateway_1t7zl4t">
      <bpmn:incoming>Flow_0ydcrpn</bpmn:incoming>
      <bpmn:incoming>Flow_1d5313z</bpmn:incoming>
      <bpmn:outgoing>Flow_1y299hk</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_0ydcrpn" sourceRef="Activity_1h2epaw" targetRef="Gateway_1t7zl4t" />
    <bpmn:sequenceFlow id="Flow_1d5313z" name="0" sourceRef="Gateway_0a7spma" targetRef="Gateway_1t7zl4t">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${para_var.indexOf("0") &gt; -1}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:userTask id="Activity_1h2epaw" name="部门内分组审核">
      <bpmn:incoming>Flow_0dm15h8</bpmn:incoming>
      <bpmn:outgoing>Flow_0ydcrpn</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_1y299hk" sourceRef="Gateway_1t7zl4t" targetRef="Activity_09moh95" />
    <bpmn:userTask id="Activity_0ccrd9s" name="HR审批">
      <bpmn:incoming>Flow_06cclke</bpmn:incoming>
      <bpmn:outgoing>Flow_097rgey</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:endEvent id="Event_1jkyih3" name="结束事件">
      <bpmn:incoming>Flow_097rgey</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:userTask id="Activity_09moh95" name="部门负责人审核">
      <bpmn:incoming>Flow_1y299hk</bpmn:incoming>
      <bpmn:outgoing>Flow_06cclke</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_06cclke" sourceRef="Activity_09moh95" targetRef="Activity_0ccrd9s" />
    <bpmn:sequenceFlow id="Flow_097rgey" sourceRef="Activity_0ccrd9s" targetRef="Event_1jkyih3" />
    <bpmn:sequenceFlow id="Flow_06hawzz" sourceRef="Activity_1drnsx4" targetRef="Activity_06ntta4" />
    <bpmn:task id="Activity_1drnsx4" name="初始化">
      <bpmn:extensionElements>
        <camunda:inputOutput>
          <camunda:outputParameter name="para_var">0,1</camunda:outputParameter>
        </camunda:inputOutput>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_1w8hx7u</bpmn:incoming>
      <bpmn:outgoing>Flow_06hawzz</bpmn:outgoing>
    </bpmn:task>
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_Demo11">
      <bpmndi:BPMNEdge id="Flow_1y299hk_di" bpmnElement="Flow_1y299hk">
        <di:waypoint x="885" y="277" />
        <di:waypoint x="970" y="277" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1d5313z_di" bpmnElement="Flow_1d5313z">
        <di:waypoint x="655" y="277" />
        <di:waypoint x="835" y="277" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="742" y="259" width="7" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0ydcrpn_di" bpmnElement="Flow_0ydcrpn">
        <di:waypoint x="790" y="148" />
        <di:waypoint x="860" y="148" />
        <di:waypoint x="860" y="252" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0dm15h8_di" bpmnElement="Flow_0dm15h8">
        <di:waypoint x="630" y="252" />
        <di:waypoint x="630" y="148" />
        <di:waypoint x="690" y="148" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="642" y="197" width="7" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1us3p2e_di" bpmnElement="Flow_1us3p2e">
        <di:waypoint x="530" y="277" />
        <di:waypoint x="605" y="277" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1w8hx7u_di" bpmnElement="Flow_1w8hx7u">
        <di:waypoint x="198" y="277" />
        <di:waypoint x="260" y="277" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_06cclke_di" bpmnElement="Flow_06cclke">
        <di:waypoint x="1070" y="277" />
        <di:waypoint x="1180" y="277" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_097rgey_di" bpmnElement="Flow_097rgey">
        <di:waypoint x="1280" y="277" />
        <di:waypoint x="1372" y="277" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_06hawzz_di" bpmnElement="Flow_06hawzz">
        <di:waypoint x="360" y="277" />
        <di:waypoint x="430" y="277" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="Gateway_0ap0c50_di" bpmnElement="Gateway_0a7spma">
        <dc:Bounds x="605" y="252" width="50" height="50" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="605" y="309" width="55" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gateway_1t7zl4t_di" bpmnElement="Gateway_1t7zl4t" isMarkerVisible="true">
        <dc:Bounds x="835" y="252" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_16za7az_di" bpmnElement="Activity_1h2epaw">
        <dc:Bounds x="690" y="108" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0yynbrt_di" bpmnElement="Activity_09moh95">
        <dc:Bounds x="970" y="237" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0rfuc5g_di" bpmnElement="Activity_0ccrd9s">
        <dc:Bounds x="1180" y="237" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1370nng_di" bpmnElement="Event_1jkyih3">
        <dc:Bounds x="1372" y="259" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1368" y="302" width="44" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="162" y="259" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="158" y="302" width="44" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0mhth21_di" bpmnElement="Activity_1drnsx4">
        <dc:Bounds x="260" y="237" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1b73k2c_di" bpmnElement="Activity_06ntta4">
        <dc:Bounds x="430" y="237" width="100" height="80" />
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

        Camunda Modeler没有在流程属性上设置全局变量功能,我们这里借助一个Task初始化节点来实现,在初始化节点处设置输出变量para_var,默认值为“0,1”,在流程模型的变量信息处能看到所有输出变量信息。

        注:只有输出变量的作用域是全局的,输入变量的作用域是只对当前节点的

 

 

       包容网关分支条件设置,para_var包含1,则走部门内分组审核,包含0则走部门负责人审核。

        创建流程并检查返回变量

	@Test
	public void createProcess() {
		try {
			String processDefKey = "Process_Demo11";
			String userId = "bx1";
			AuthenticationService authenticationService = new AuthenticationService();
			// 获取当前流程引擎的名称
			String engineName = processEngine.getName();
			// 用户无密码登录
			UserAuthentication authentication = (UserAuthentication) authenticationService
					.createAuthenticate(engineName, userId, null, null);
			//设置当前用户为操作人
			identityService.setAuthenticatedUserId(authentication.getName());
			// 创建流程
			ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefKey);
			//流程创建成功获取变量信息
			if (processInstance != null && StringUtils.isNotBlank(processInstance.getId())) {
				Map<String, Object> vars = runtimeService.getVariables(processInstance.getId());
				logger.info(JSON.toJSONString(vars));
			} else {
				throw new Exception("创建流程实例失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

         查看打印日志,有该流程实例的流程全局变量返回

2021-09-03 21:50:45,885 [main] INFO  org.camunda.bpm.DemoApplicationTest:682 - {"starter":"bx1","para_var":"0,1"}

         在Cockpit里也能看到,流程发起后初始化节点自动执行了,并且为该流程实例设置了变量para_var

        然后通过获取下一节点方法,获取到起草节点后的节点。

[
    {
        "assignment":"",
        "name":"部门内分组审核",
        "key":"Activity_1h2epaw"
    },
    {
        "assignment":"",
        "name":"部门负责人审核",
        "key":"Activity_09moh95"
    }
]

        起草人在选定好对应的节点和节点处理人后提交到对应分支执行,下面示例将para_var=1来表示实现流转到“部门内分组审核”节点

        思考:是否有其他方法实现呢?

	@Test
	public void submitTask3() {
		try {

			String userId = "bx1";
			String taskId = "a20e9285-0cc4-11ec-b197-00ff0269ba71";
			String processInstId = "a1f64f8b-0cc4-11ec-b197-00ff0269ba71";
			String nextUserId = "bx2";
			AuthenticationService authenticationService = new AuthenticationService();
			String engineName = processEngine.getName();
			UserAuthentication authentication = (UserAuthentication) authenticationService
					.createAuthenticate(engineName, userId, null, null);
			logger.info("authentication--------->" + authentication.getName());

			identityService.setAuthenticatedUserId(authentication.getName());
			List<TaskDto> taskList = new ArrayList<TaskDto>();
			//目标节点的分支变量为1
			runtimeService.setVariable(processInstId, "para_var", "1");
			//完成任务
			taskService.complete(taskId);

			taskList = simpleGetTasks(processInstId);

			System.out.println(JSON.toJSONString(taskList));
			if (taskList != null && taskList.size() == 1) {
				//设置目标节点处理人
				taskService.setAssignee(taskList.get(0).getId(), nextUserId);
			}
			taskList = simpleGetTasks(processInstId);
			System.out.println(JSON.toJSONString(taskList));

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

        提交后,流程流转到“部门内分组审核”,对应审批人为"bx2",流程变量para_var为“1”。

        任务操作记录能看到是有bx1发给bx2的。

        若将para_var修改为0,处理人为“bx3”,查看Cockpit里边,发现流程流转符合预期,流转到“部门负责人审核”节点,任务是由bx1发给bx3的。

@Test
	public void submitTask3() {
		try {

			String userId = "bx1";
			String taskId = "7b1fc48b-0cc6-11ec-bd79-00ff0269ba71";
			String processInstId = "7afea7f1-0cc6-11ec-bd79-00ff0269ba71";
			String nextUserId = "bx3";
			AuthenticationService authenticationService = new AuthenticationService();
			String engineName = processEngine.getName();
			UserAuthentication authentication = (UserAuthentication) authenticationService
					.createAuthenticate(engineName, userId, null, null);
			logger.info("authentication--------->" + authentication.getName());

			identityService.setAuthenticatedUserId(authentication.getName());
			List<TaskDto> taskList = new ArrayList<TaskDto>();
			//目标节点的分支变量为1
			runtimeService.setVariable(processInstId, "para_var", "0");
			//完成任务
			taskService.complete(taskId);

			taskList = simpleGetTasks(processInstId);

			System.out.println(JSON.toJSONString(taskList));
			if (taskList != null && taskList.size() == 1) {
				//设置目标节点处理人
				taskService.setAssignee(taskList.get(0).getId(), nextUserId);
			}
			taskList = simpleGetTasks(processInstId);
			System.out.println(JSON.toJSONString(taskList));

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Camunda Modeler给流程模型设置流程变量及默认值 的相关文章

  • NoInitialContextException:heroku 战争部署

    我一直在开发一个 J2EE 项目 并且在其中使用连接池 也通过部署在 heroku 上的数据库进行访问 我使用以下代码来设置 Connection 对象 Context initContext new InitialContext Cont
  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从

随机推荐

  • json-server常见问题

    json server搭建本地测试服务器 mock数据 模拟后台数据 现在基本上都是前后端分离 前端是前端工程师 后端属于后端工程师 但是前后端交互是个必不可少的环节 一般用Ajax进行交互 还需要一些实验数据来支撑 就需要模拟数据 1 v
  • Android第二讲笔记(约束布局ConstraintLayout)

    目录 为什么要使用约束布局ConstraintLayout 约束布局基本属性 约束布局简单使用方法 示例 示例一 仿QQ消息 示例二 仿微信登陆界面 示例三 仿QQ音乐界面 补充 写在最后 ScrollView 滚动布局 示例一 纵向滚动
  • 实测C++变量长度、最小值、最大值

    说明 基本的内置变量类型 bool char wchar t int float double 类型修饰符 signed unsigned short long 环境 win7x64 VS2015 Debugx86 测试结果 补充 doub
  • [1190]如何解决Chrome无法访问ftp的问题

    在最新一次Chrome更新中彻底抛弃ftp协议了 之前可以在搜索栏搜索chrome flags 并将Enable support for ftp Urls设置为Enabled才能访问ftp 但是在Chrome96中直接将修改选项剔除了 这代
  • 珠心算测验-NOIP2014普及t1

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术 珠心算训练 既能够开发智力 又能够为日常生活带来很多便利 因而在很多学校得到普及 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法 他随机生成一个正整数集合
  • SpringBoot 项目在Linux服务器上启动、停止脚本(详细)

    SpringBoot 项目在Linux服务器上启动 停止脚本详细 创建脚本 在jar包目录 创建脚本 实际项目只需要修改包名 1 进入可编辑 执行代码 vim xxxxxx sh xxxxxx就是你自己创建的脚本名称 写好后 按下回车后 进
  • C语言

    这篇文章主要和大家分享三种基础的排序算法 冒泡排序 选择排序 快速排序 一 排序问题 1 冒泡排序 冒泡排序的主要思想是通过两两相邻的元素进行比较 通过元素的大小决定是否交换 一趟冒泡排序的结果是一定有一个最大数会排到最后一个元素 因此对n
  • Python中requests包的安装

    在使用pycharm开发的时候 我们经常需要导入一些包 但是这些包 我们事先并没有安装 一个显著的现象就是我们在pycharm中导入一个包时 系统提示不存在 那就是我们没有安装这个包 举一个例子 我在使用pycharm时 需要导入一个req
  • c++ typeid使用

    今天用了下c typeid这个操作符记录一下 class parent void getdata virtual void deal class son public parent int main parent pa new son po
  • How do you install Typecho in Docker and mount hosting server's Mysql service

    Fist of all I presume that you have already installed Docker and Portainer and works smoothly All CLI procdures are base
  • Ubuntu安装GCC 3.4

    Ubuntu安装GCC 3 4 一 背景 二 安装 三 总结 一 背景 因最近学习hit os编译linux 0 11版本内核 需要使用到gcc 3 4 故此记录 二 安装 下载deb包 wget http old releases ubu
  • 如何运用bat脚本批量 重命名/复制 文件

    在平时运维的时候 最繁琐的就是要每个月写运维记录的文档如excel表格 一个月30日要产生30个文件 拷30个运维记录文档的模版再进行重命名实在太麻烦了 所以想到copy模版之后可以用脚本来对文件进行重命名自己想要的效果 首先给出效果图 下
  • 登录和注册页面 - 验证码功能的实现

    目录 1 生成验证码 2 将本地验证码发布成 URL 3 后端返回验证码的 URL 给前端 4 前端将用户输入的验证码传给后端 5 后端验证验证码 1 生成验证码 使用hutool 工具生成验证码 1 1 添加 hutool 验证码依赖
  • Arduino的ESP32搭建方法-亲测OK

    使用乐鑫官方资源搭建基于Arduino的ESP32的开发环境 目录 一 配置IDE管理器 二 自动安装板支持包 三 手动安装板支持包 四 网盘的ESP32全系列基本库的板支持包 使用乐鑫官方库搭建Arduino开发环境 乐鑫官方Github
  • 数码管从0到9再从9到0循环显示

    源程序 include
  • linux中用shell脚本对tomcat和nginx做日志切割

    Tomcat日志catalina out切割小脚本 bin bash cut tomcat catalina out yesterday date F d 1 days cd usr local tomcat7 0 70 log cp ca
  • 网络编程基础API

    基础API signal函数 inculde
  • 中文语音识别数据集总结

    目录 OpenSLR国内镜像 1 Free ST Chinese Mandarin Corpus 2 Primewords Chinese Corpus Set 1 3 爱数智慧中文手机录音音频语料库 Mandarin Chinese Re
  • 我与我的电脑:一个学生的第一台电脑与职场奋斗史

    分享一个同学的故事 我的一个同学他是个聪明且勤奋的学生 当他在2003年上学时 电脑已经慢慢成为人们生活和工作的工具 因此 他决定购买一台电脑来帮助自己的学习和研究 但是 由于他的家庭经济并不富裕 他无法购买一台高端的品牌电脑 只能考虑购买
  • Camunda Modeler给流程模型设置流程变量及默认值

    如下图所示 在提单页面 发起人需要手动选择走部门内分组审核还是部门负责人审核 对于这种由发起人选择走不同分支的且分支条件不是来自业务系统的情形 需要在流程模型上设置变量并赋初始化值 下面介绍如何设置及使用