Activiti工作流(二)
Activiti进阶一、流程实例什么是流程实例流程实例(ProcessInstance)代表流程定义的执行实例。
一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。
例如:用户或程序按照流程定义内容发起一个流程,这就是一个流程实例。
流程定义和流程实例的图解:
启动流程实例 并添加Businesskey(业务标识)流程定义部署在activiti后,就可以在系统中通过activiti去管理该流程的执行,执行流程表示流程的一次执行。
比如部署系统出差流程后,如果某用户要申请出差这时就需要执行这个流程,如果另外一个用户也要申请出差则也需要执行该流程,每个执行互不影响,每个执行是单独的流程实例。
启动流程实例时,指定的businesskey,就会在act_ru_execution #流程实例的执行表中存储businesskey。
Businesskey:业务标识,通常为业务表的主键,业务标识和流程实例一一对应。业务标识来源于业务系统。存储业务标识就是根据业务标识来关联查询业务系统的数据。
比如:出差流程启动一个流程实例,就可以将出差单的id作为业务标识存储 ...
Maven引入本地jar包
Maven引入本地jar包问题maven引入本地jar包,打包时target无法打入的问题,解决scope为system的jar包无法被打包进jar文件的解决方案。
解决思路项目中由于需求的需要,可能需要引入maven仓库以外的jar包,但是maven仓库中没有,就需要通过maven引入本地jar,引入方式如下。
resources中放入本地jar,通过maven的scope为system的方式引入本地jar
maven项目中引入本地jar包代码如下:
12345678<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> <version>2.3.1</version> <scope>system</scope> <!--添加jar包路径--> <systemPath>$ ...
Mybatis结果集映射
Mybatis结果集映射概述结果映射指的是将数据表中的字段与实体类中的属性关联起来,这样 MyBatis 就可以根据查询到的数据来填充实体对象的属性,帮助我们完成赋值操作。
简单结果映射使用Map映射resultType设置为map,会将列名映射为map的key,值为map的value,当值为null时,该key不会在结果map中存在。
123<select id="getUser" resultType="map"> SELECT id, username FROM user WHERE id = #{id}</select>
使用JavaBeanMyBatis 会自动将查询结果中的列名与 Java 对象的属性名进行匹配,然后自动映射结果集到对象中。需要保证查询结果中的列名与对象的属性名一致。
比如数据库的字段名和实体类的属性名相同时,可以直接在xml头标签中使用resultType指定实体类来映射。
实体类:
12345@Datapublic class User { p ...
MySQL COUNT
数据库统计COUNT概述在我们平时查询数据库表记录行数的时候,经常会使用到count()函数,比如使用count(*)、count(1)或者count(某个主键或索引列),现在我们来对比一下,那个性能更优秀。
创建短信表比如说,现在有一张**短信表(sms)**,里面放了各种需要发送的短信信息。
sms建表sql
123456CREATE TABLE sms ( id INT AUTO_INCREMENT PRIMARY KEY, email VARCHAR(255) NOT NULL, state INT NOT NULL DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)ENGINE=InnoDB;
业务描述:state字段,为0的时候说明这时候短信还未发送。
此时还会有一个异步线程不断的捞起未发送(state=0)的短信数据,执行发短信操作,发送成功之后state字段会被置为1(已发送),也就是说未发送的数据会不断变少。
假设由于某些原因,你现在需要做一些监控,比如监控的内容是,你的sms ...
PostgreSQL
PostgreSQLPG简介PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。
PostgreSQL 开发者把它念作 post-gress-Q-L。
PostgreSQL 的 Slogan 是 “世界上最先进的开源关系型数据库”。
“开源界的Oracle”,去O首选。
PostgreSQL官网
https://www.postgresql.org/
PostgreSQL中文社区
http://www.postgres.cn/v2/home
全球数据库排行
https://db-engines.com/en/
国产数据库排行
https://www.modb.pro/dbRank
PG的历史PostgreSQL最初设想于1986年,当时被叫做Berkley Postgres Project。
该项目一直到1994年都处于演进和修改中,直到开发人员Andrew Yu和Jolly Chen在Postgres中添加了一个SQL(Structured Query Language,结构化查询语言)翻译程序,该版本叫做Postgres95,在开放 ...
Redis序列化器
Redis序列化器引言SpringDataRedis的使用步骤:
引入spring-boot-starter-data-redis依赖
在application.yml配置Redis信息
注入RedisTemplate
在使用SpringDataRedis时,必然需要注入RedisTemplate,并进行对Redis的相关操作。
SpringDataRedis的序列化方式RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化。绝大多数情况下,不推荐使用 JdkSerializationRedisSerializer 进行序列化。主要是不方便人工排查数据,且操作的对象还需要实现Serializable 接口。
问题:
序列化方式一使用配置类自定义序列化方式:
123456789101112131415161718192021222324252627/** * Redis配置类 */@Configurationpublic class RedisConfig extends CachingCo ...
Redis最佳实践
Redis最佳实践Redis键值设计key设计Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:
遵循基本格式:[业务名称]:[数据名]:[id]
长度不超过44字节
不包含特殊字符
例如:在登录业务中,保存用户信息,key可以这样设计:
这样设计的优点:
可读性强
避免key冲突
方便管理
更节省内存
key是string类型,底层编码包含int、embstr和raw三种。embstr在小于44字节使用,采用连续内存空间,内存占用更小。
拒绝BigKey什么是BigKeyBigKey通常以Key的大小和Key中成员的数量来综合判定,例如:
Key本身的数据量过大:一个String类型的Key,它的值为5 MB。
Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个。
Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。
推荐值:
单个key的value小于10KB。
对于集合类型的key,建议元素数量小于1000。
BigKey的危害
网络阻塞: ...
Redis实战篇
Redis实战篇内容概述
短信登录
这部分会使用Redis共享session来实现
但其实我在之前的瑞吉外卖的项目优化部分就做过了,用Redis替换session来存储邮箱验证码
商户查询缓存
这部分要理解缓存击穿,缓存穿透,缓存雪崩等问题,对于这些概念的理解不仅仅是停留在概念上,更是能在代码中看到对应的内容
优惠券秒杀
这部分我们可以学会Redis的计数器功能,结合Lua完成高性能的Redis操作,同时学会Redis分布式锁的原理,包括Redis的三种消息队列
附近的商户
利用Redis的GEOHash(新数据结构,前面没有应用场景就没介绍)来完成对于地理坐标的操作
UV统计
主要是使用Redis来完成统计功能
用户签到
使用Redis的BitMap数据统计功能
好友关注
基于Set集合的关注、取消关注,共同关注等等功能,这部分在上篇的练习题中出现过,这次我们在项目中来使用一下
达人探店
基于List来完成点赞列表的操作,同时基于SortedSet来完成点赞的排行榜功能
短信登录导入项目在实现功能之前 ...
SpringBoot邮件发送
SpringBoot邮件发送介绍邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会用到邮件发送。Spring中提供了JavaMailSender用来简化邮件配置,Spring Boot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。下面就来看看Spring Boot中如何发送邮件。
QQ邮箱开启服务以QQ邮箱为例,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。SMTP全称为Simple MailTransfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。
什么是 POP3/IMAP/SMTP 服务
POP3 (Post Office Protocol - Version 3)协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。
MAP (Internet Message Access Protocol)协议用于支持使用电子邮件客户端交互式存取服务器上的邮件。
SMTP (Simple Mail Transfer ...
Pandoc工具使用
Pandoc工具使用介绍如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。
Pandoc 是一个基于 GPL 协议开源的免费 命令行软件,由加州大学伯克利分校哲学系教授 John MacFarlane 使用 Haskell 语言开发,目前另一位核心开发者是来自德国的 Albert Krewinkel。截止 2022 年 12 月 10 日,Pandoc 的 GitHub 仓库拥有超过 27,000 个 Star,3,000 次 Fork。
安装[pandoc安装使用](Releases · jgm/pandoc · GitHub)
使用
将html格式文件转储markdown格式文件
1pandoc -s input.html -o output.md
Pandoc 还可以读取网页内容,并将其转换为其他格式
将网址数据转储为markdown格式文件
1pandoc -f html https://cyborg2077.github.io/2022/10/22/RedisPractice -t commonmark-raw_html - ...