实习划水两周之后,组里项目有了一个小小的新需求,添加流程审批的功能,被安排买了疯狂Activiti的书,就开始了不着急的代码研究和实验。小白自己的记录帖,欢迎交流指正。
【第一版:jsp+activiti6.0.0 + mysql】
跑了疯狂Activiti教材的最后一章,一个小demo,看懂了实现原理,之后的自己开发过程中还参考了一下这个demo的后台代码。
【第二版:spring boot1.5.4 + activiti6.0.0 + spring data jpa + mysql】
自己开始练手写一个小项目,在这之前没写过java项目,所以都是现查现学。先搭好了spring boot的框架,然后加入了activiti6.0.0的依赖,用的maven管理,相对方便。
顺便说一下版本选择,之前想用activiti6.X+spring boot 2.1.X,但是网上查到的资料都是有冲突以及去掉某个包或者修改源码的解决方案,因为买的书是activiti6.0.0,所以我换掉了spring boot的版本,改为1.5.4,就没有任何冲突了。
spring data jpa确实好用,入门选手上手很快,只需要加几个注解,继承jparepository类声明查询接口即可,相对复杂的查询写上sql语句即可。分页用的也是jpa自带的pageable,方便好用,定义好分页参数后加到查询接口的参数里即可,网上都有很多资料。
到这个版本,我基本实现了基础的流程审批,包括多实例(会签),没有驳回,在网上查到了很多生成高亮流程图的方案,选了一个实现了一下,但是有bug,还没来得及修复。
【第三版:spring boot1.5.4 + activiti6.0.0 + mybatis + mysql】
由于项目需求,需要适配国产达梦数据库,查了很多资料,找到的jpa+达梦的资料很少很少,主要是因为达梦没有hibernate方言包,jpa无法解析接口,再加上同事小伙伴都用的mybatis,我也就换了mybatis,先用mysql来测试更换成功之后再适配达梦.
对应的,jpa的分页pageable也不能用了,这里就替换成pagehelper插件,挺好用的,github上有开源代码,用法网上也有很多资料。
【第四版:spring boot1.5.4 + activiti6.0.0 + mybatis + 达梦6】
之前的项目都适配的达梦6,现场环境目前也是达梦6,所以我从达梦6开始适配。引入达梦6JDBC驱动包依赖,更换数据源配置即可。
Activiti需要自动创建表格,6.0.0是28张表,默认支持的都是主流数据库,国产数据库达梦并不在此之列,为了解决这个问题,我又是在网上一顿查资料,找到的唯一一个靠谱的是达梦数据库官方微博(没错,就是微博)在17年发的一篇文章, 如何让达梦7支持Activiti,我按照里面的指导,用oracle数据库来兼容达梦,在Activiti配置文件的数据源类型配置了oracle,修改了activiti的jar包里的oracle建表sql文件,将NVARCHAR2数据类型全部替换为VARCHAR,测试发现还是不行,因为我用的是达梦6而不是达梦7,所以解决方案不匹配相对正常,我开始根据控制台的报错一个个修改sql,大多都是语法的问题,但是修改了好多处语法之后还是报错,改好一个就报一个新的错误,最后不行了,决定尝试一下达梦7.
顺便提一下,达梦6的数据结构是:数据库-模式-表,传统的如mysql没有模式这一层,使用达梦的默认用户SYSDBA登录的话,在写sql的时候需要数据库名.模式名来定位到你的项目数据目录,如果想要直接定位,可以创建一个跟模式同名的用户,就可以直接写表名来定位了。
【第五版:spring boot1.5.4 + activiti6.0.0 + mybatis + 达梦7】
更换为达梦7之后,驱动包也要更换,达梦7和达梦6的驱动包不一样,不通用。
这次按照官微的指导,依旧使用oracle兼容,修改sql文件的数据类型,再次尝试自动建表,一次成功,官微就是靠谱。
pagehelper据之前适配达梦的同事说也会出问题,给了我两个方言文件覆盖掉jar包里的对应的文件就可以使用了。
到目前为止,技术框架的适配基本都搞定了,但是Activiti的使用我还没解决,包括多实例之后的小问题和流程图高亮流程线走向异常的问题,接下来继续研究。