• Activiti整合Spring (Mysql8.0版本)


    这几天学习黑马Acticiti视频的一些简单的使用,整合下了Spring简单记录下

    中间也是遇到了很多的坑,不过都以及通过百度和自己思考解决了,看了网上的教程和相关笔记,大家普遍都是和黑马一样,用的Mysql5.7版本,我本地的Mysql是8.0的,懒得去换版本了,我就想着霸王硬上弓,谁知道里面的问题还是挺多的

    说实话,看了网上这么多相关的内容,全部清一色是mysql5.7的,这对我一个8.0的靓仔非常的不友好啊,能查到的东西有限,所以如果你也是8.0的,希望在面对遇到这些问题的时候本文能够帮助到您,这也是我的初衷

    1 用到的相关技术

    1 Spring框架  2 Mysql(8.0)  3 Maven 4 Activiti(7.0) 5 Junit单元测试

    2 创建Spring项目

    maven项目也不是不行

    3 引入相关依赖 

    我把全部的pom都放进去了,大家根据自己的需求自取

    注意:我数据库是8.0的,所以用的依赖也是8.0的,如果你本地是5.7的,记得更换版本哦,不然会报下面这个错,我单独出了个文章   

    Activiti启报错: Cannot create PoolableConnectionFactory (Could not create connection to database server_不允许摆烂的博客-CSDN博客

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>com.examplegroupId>
    6. <artifactId>ActicitiSpringDemoartifactId>
    7. <version>1.0-SNAPSHOTversion>
    8. <properties>
    9. <slf4j.version>1.6.6slf4j.version>
    10. <log4j.version>1.2.12log4j.version>
    11. properties>
    12. <dependencies>
    13. <dependency>
    14. <groupId>org.activitigroupId>
    15. <artifactId>activiti-engineartifactId>
    16. <version>7.0.0.Beta1version>
    17. dependency>
    18. <dependency>
    19. <groupId>org.activitigroupId>
    20. <artifactId>activiti-springartifactId>
    21. <version>7.0.0.Beta1version>
    22. dependency>
    23. <dependency>
    24. <groupId>org.activitigroupId>
    25. <artifactId>activiti-bpmn-modelartifactId>
    26. <version>7.0.0.Beta1version>
    27. dependency>
    28. <dependency>
    29. <groupId>org.activitigroupId>
    30. <artifactId>activiti-bpmn-converterartifactId>
    31. <version>7.0.0.Beta1version>
    32. dependency>
    33. <dependency>
    34. <groupId>org.activitigroupId>
    35. <artifactId>activiti-json-converterartifactId>
    36. <version>7.0.0.Beta1version>
    37. dependency>
    38. <dependency>
    39. <groupId>org.activitigroupId>
    40. <artifactId>activiti-bpmn-layoutartifactId>
    41. <version>7.0.0.Beta1version>
    42. dependency>
    43. <dependency>
    44. <groupId>org.activiti.cloudgroupId>
    45. <artifactId>activiti-cloud-services-apiartifactId>
    46. <version>7.0.0.Beta1version>
    47. dependency>
    48. <dependency>
    49. <groupId>aspectjgroupId>
    50. <artifactId>aspectjweaverartifactId>
    51. <version>1.5.4version>
    52. dependency>
    53. <dependency>
    54. <groupId>mysqlgroupId>
    55. <artifactId>mysql-connector-javaartifactId>
    56. <version>8.0.18version>
    57. dependency>
    58. <dependency>
    59. <groupId>junitgroupId>
    60. <artifactId>junitartifactId>
    61. <version>4.12version>
    62. dependency>
    63. <dependency>
    64. <groupId>org.springframeworkgroupId>
    65. <artifactId>spring-testartifactId>
    66. <version>5.0.7.RELEASEversion>
    67. dependency>
    68. <dependency>
    69. <groupId>log4jgroupId>
    70. <artifactId>log4jartifactId>
    71. <version>${log4j.version}version>
    72. dependency>
    73. <dependency>
    74. <groupId>org.slf4jgroupId>
    75. <artifactId>slf4j-apiartifactId>
    76. <version>${slf4j.version}version>
    77. dependency>
    78. <dependency>
    79. <groupId>org.slf4jgroupId>
    80. <artifactId>slf4j-log4j12artifactId>
    81. <version>${slf4j.version}version>
    82. dependency>
    83. <dependency>
    84. <groupId>org.slf4jgroupId>
    85. <artifactId>slf4j-nopartifactId>
    86. <version>${slf4j.version}version>
    87. dependency>
    88. <dependency>
    89. <groupId>org.mybatisgroupId>
    90. <artifactId>mybatisartifactId>
    91. <version>3.4.5version>
    92. dependency>
    93. <dependency>
    94. <groupId>commons-dbcpgroupId>
    95. <artifactId>commons-dbcpartifactId>
    96. <version>1.4version>
    97. dependency>
    98. dependencies>
    99. <build>
    100. <plugins>
    101. plugins>
    102. build>
    103. project>

    4 创建spring配置xml文件

    在你的resources目录下创建activiti-spring.xml 当然名字不是固定的,不管一会测试的时候需要对上

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xmlns:tx="http://www.springframework.org/schema/tx"
    4. xmlns:aop="http://www.springframework.org/schema/aop"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans
    6. http://www.springframework.org/schema/beans/spring-beans.xsd
    7. http://www.springframework.org/schema/tx
    8. http://www.springframework.org/schema/tx/spring-tx.xsd
    9. http://www.springframework.org/schema/aop
    10. http://www.springframework.org/schema/aop/spring-aop.xsd">
    11. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    12. <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    13. <property name="url" value="jdbc:mysql://localhost:3306/activitispring?useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC"/>
    14. <property name="username" value="root"/>
    15. <property name="password" value="root"/>
    16. <property name="maxActive" value="3" />
    17. <property name="maxIdle" value="1" />
    18. bean>
    19. <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
    20. <property name="dataSource" ref="dataSource"/>
    21. <property name="transactionManager" ref="transactionManager"/>
    22. <property name="databaseSchemaUpdate" value="true"/>
    23. bean>
    24. <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    25. <property name="processEngineConfiguration" ref="processEngineConfiguration"/>
    26. bean>
    27. <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
    28. <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
    29. <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
    30. <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
    31. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    32. <property name="dataSource" ref="dataSource"/>
    33. bean>
    34. <tx:advice id="txAdvice" transaction-manager="transactionManager">
    35. <tx:attributes>
    36. <tx:method name="save*" propagation="REQUIRED"/>
    37. <tx:method name="insert*" propagation="REQUIRED"/>
    38. <tx:method name="delete*" propagation="REQUIRED"/>
    39. <tx:method name="update*" propagation="REQUIRED"/>
    40. <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
    41. <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
    42. tx:attributes>
    43. tx:advice>
    44. beans>

    这个地方主要需要注意的地方有点多,也是我耗时最长的地方

    第一:你的驱动信息,根据版本的不同驱动也不同,8.0需要多加个cj

    第二:数据库的url的一些参数,我这个是比较完整的,帮大伙踩过坑了,缺的参数报的错我都查过了,如果你遇到什么问题,根据日志报错信息去查,肯定可以解决

    对于mysql-connector-java版本 ≥ 8.x,需在数据库访问的地址上添加一个非常重要的参数信息:nullCatalogMeansCurrent=true

    如果不加就会报下面类似的错误,这就会给你一种幻觉,明明日志已经查到了,但是为什么提示不存在呢?

    ‘myactiviti.act_ge_property’ doesn’t exist,创建表不成功时遇到。为什么创建不成功,因为mysql使用schema标识库名而不是catalog,因此mysql会扫描所有的库来找表,如果其他库中有相同名称的表,activiti就以为找到了,本质上这个表在当前数据库中并不存在,我本地有一个另外的库,里面存在25张activiti相关的表,我想可能是查到那个库里面了,这个错误非常坑,谨记!

    在xml中用&拼接url参数也是不行的,牵扯到一个转义问题,具体参考我这篇文章

    Mybatis xml文件中&出现报错问题:Unescaped & or nonterminated character/entity reference_不允许摆烂的博客-CSDN博客

    第三:因为我们把配置信息交给了spring,spring启动加载的时候会根据我们的配置创建25张表,这里我们指名了数据库名,所以需要提前准备好一个库

    5 运行单元测试

    以上都处理完成了,那么就可以写代码测试了 一个简单的单元测试

    1. package com.wyh;
    2. import org.activiti.engine.RepositoryService;
    3. import org.junit.Test;
    4. import org.junit.runner.RunWith;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.test.context.ContextConfiguration;
    7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    8. @RunWith(SpringJUnit4ClassRunner.class)
    9. @ContextConfiguration(locations = "classpath:activiti-spring.xml")
    10. public class ActivitiSpringTest {
    11. @Autowired
    12. private RepositoryService repositoryService;
    13. @Test
    14. public void testRep(){
    15. System.out.println(repositoryService);
    16. }
    17. }

    如果能输出内容,且数据库里面创建了25张表,那么这样简单的测试以及spring整合Activiti就算成功了

    6 项目目录

    来一个完整的项目目录吧,省的有的同学迷路

    7 补充

    还有学习了一些简单的Activiti的API,以及使用IDEA插件自定义流程图,并审批或拒签,这些后面再出一些文章去介绍吧,晚安打工人

  • 相关阅读:
    11、监测数据采集物联网应用开发步骤(8.2)
    Adaptive AUTOSAR 学习笔记 5 - 架构 - 物理视图
    扩展欧几里得算法 | exgcd 证明 + 板子 + 习题
    〖Python APP 自动化测试实战篇②〗 - 大话闲扯 APP 自动化工具的演进史
    动态IP代理是什么?一文看懂动态代理IP
    AUTOSAR AP 硬核知识点梳理(2)— 架构详解
    Nginx版本升级
    Hexagon_V65_Programmers_Reference_Manual(5)
    ReentrantLock实现公平锁,可中断,条件变量,可重入案例
    Oracle ADG状态查看与相关视图
  • 原文地址:https://blog.csdn.net/weixin_46713508/article/details/126025413