Flowable 中节点任意跳转

工作流开发中经常有一种回退的需求,审批回退、驳回、撤回等都需要。

在 Activiti 中流程底层没开放对应的接口,而在 Flowable 中已经提供了支持节点跳转的功能。同时我们也可以像在 Activiti 中通过实现自己的 Command 来实现任意节点跳转的需求。

下面我们先介绍一下 Flowable 提供的内置跳转功能,最后我们再手动实现任务跳转的 Command。

阅读更多

使用注解的方式注册 Quartz 的 Job

Java 程序员最喜欢的就是造轮子了,后端开发中时常要自己造一些轮子,一个工具包、封装一些开源组件、功能定制化等等,太常见了。

在 Spring 的自造轮子最常见的莫过于设计个注解,然后扫描到后在 BeanPostProcessor 中处理该注解对象,并根据注解组装一个新的对象然后注册到 Spring 中。

场景如《Quartz 动态调度 Job》所述那样,现在对文中 @ScheduledJob 注解的实现做详细说明。

阅读更多

动态注册 Bean 到 Spring 中

如果需要要启动后向 Spring 容器个注册一个动态创建的对象,可以通过以下几个方式实现:

  1. 直接注册 Singleton 对象
  2. 注册 BeanDefinition
阅读更多

事务的特性和隔离级别

数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务的使用是数据库管理系统区别文件系统的重要特征之一。

阅读更多

在 PostgreSQL 中删除 DB 时报资源占用

一次性删除数据库中数据最快的方法就是直接 Drop 掉 DB,重新建一个,但是在 Drop 时可能会报占用的错误。

1
There is 1 other session using the database.

出现上诉错误时可以用以下方法解决,方法来自 stackoverflow。

阅读更多

Postgresql 中新增用户、数据库和授权

本文介绍如何快速在 PostgreSQL 中新建 DB 和用户并完成授权,简要如下,详细说明请看详情页。

TL;DR

1
2
3
4
sudo -u postgres psql
postgres=# create database mydb;
postgres=# create user myuser with encrypted password 'mypass';
postgres=# grant all privileges on database mydb to myuser;
阅读更多

PropertySource 注解读取 Yaml 配置文件

Spring 中常用 @PropertySource 注解来加载指定配置文件,但是 @PropertySource 注解也有一些限制,如:

  1. 无法加载 Yaml 格式的配置
  2. 配置的文件不支持 profile active 配置

本文将通过扩展的方式解决以上的需求。

阅读更多

docker swarm 删除节点报权限不足

在 HomeLab 的自建 Docker Swarm 集群中,在尝试删除集群中的节点时报了 permission denied 的错误。这个问题可能是 AppArmor 安全策略的问题。

由于在 HomeLab 安装 Docker 和组建 Swarm 集群时都是按照 Quick Start 相关的指引,使用的默认的 Docker AppArmor 安全配置文件。在删除节点时,
操作的配置是没有权限的。

所以这里可以简单的将 AppArmor 先禁用,再把节点删除。

1
sudo systemctl disable apparmor.service --now

修复 ESXI 报无法打开磁盘错误

软路由的 exsi 虚拟机在一次异常断电后,无法启动某个虚拟主机,手动启动报 无法打开磁盘 的错误。

1
无法打开磁盘“/vmfs/volumes/XXX/LeDe/LeDe.vmdk”或其所依赖的快照磁盘之一。

查了一下网上的资料,可以通过以下
方式修复该问题。

阅读更多

Python 3 中使用 Sqlite3 报 no module

最近在开发一个 Telegram 小机器人,由于功能简单所以也没考虑用什么大型的关系数据库啥的,选用了 Sqlite3 这个嵌入式数据库,它的数据库就是一个文件。

程序原先使用的是 Python 2 写的,在写完核心功能后决定将代码基于 Python 3 调整一下,引人 SQLAlchemy ORM 来管理数据实体。(这次调整使用 ORM 极大方便了后面功能的加入)

调整成 Python3 后在本地运行没有任何问题,但是一发布到服务器上运行就会报 no module named '_sqlite3' 错误。

阅读更多