本文就不对activiti做解释,下面直接看项目集成

以下顺序方面根据我的理解来,可以先从第二章看,再看第一张与第三章

增加activiti表的API,备注用。

目录

一、springboot2.X集成activiti

1.1. 引入jar包

1.2. 创建启动类(componentScan是自己项目持久化模板,可以直接删掉)

1.3. 配置application.yml

1.4. 启动可能出现的错误

二、编写测试流程

三、编写bpmn

1.1 设置编码

1.2 创建bpmn

1.3 编写逻辑

四、activiti数据库表概览

1.1 说明

1.2 概览

1.2.1   Activiti数据表清单:



一、springboot2.X集成activiti

1.1. 引入jar包


  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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <artifactId>enn-activiti</artifactId>
  6.     <groupId>enn.activiti</groupId>
  7.     <version>1.1.1-SNAPSHOT</version>
  8.     <packaging>jar</packaging>
  9.     <parent>
  10.         <groupId>org.springframework.boot</groupId>
  11.         <artifactId>spring-boot-starter-parent</artifactId>
  12.         <version>2.0.4.RELEASE</version>
  13.     </parent>
  14.     <dependencies>
  15.         <dependency>
  16.             <groupId>org.springframework.boot</groupId>
  17.             <artifactId>spring-boot-starter-web</artifactId>
  18.             <exclusions>
  19.                 <exclusion>
  20.                     <groupId>org.hibernate.validator</groupId>
  21.                     <artifactId>hibernate-validator</artifactId>
  22.                 </exclusion>
  23.                 <exclusion>
  24.                     <groupId>org.apache.logging.log4j</groupId>
  25.                     <artifactId>log4j-to-slf4j</artifactId>
  26.                 </exclusion>
  27.                 <exclusion>
  28.                     <groupId>org.slf4j</groupId>
  29.                     <artifactId>jul-to-slf4j</artifactId>
  30.                 </exclusion>
  31.                 <exclusion>
  32.                     <groupId>org.springframework.boot</groupId>
  33.                     <artifactId>spring-boot-starter-tomcat</artifactId>
  34.                 </exclusion>
  35.             </exclusions>
  36.         </dependency>
  37.     
  38.         <dependency>
  39.             <groupId>org.activiti</groupId>
  40.             <artifactId>activiti-spring-boot-starter-basic</artifactId>
  41.             <version>6.0.0</version>
  42.             <exclusions>
  43.                 <exclusion>
  44.                     <groupId>javax.persistence</groupId>
  45.                     <artifactId>persistence-api</artifactId>
  46.                 </exclusion>
  47.             </exclusions>
  48.         </dependency>
  49.         <dependency>
  50.             <groupId>org.springframework.boot</groupId>
  51.             <artifactId>spring-boot-starter-data-jpa</artifactId>
  52.         </dependency>
  53.         <dependency>
  54.             <groupId>org.springframework.boot</groupId>
  55.             <artifactId>spring-boot-starter-thymeleaf</artifactId>
  56.         </dependency>
  57.         <dependency>
  58.             <groupId>org.springframework.boot</groupId>
  59.             <artifactId>spring-boot-starter-test</artifactId>
  60.             <scope>test</scope>
  61.         </dependency>
  62.     
  63.         
  64.     </dependencies>
  65.     <profiles>
  66.         <profile>
  67.             <id>local</id>
  68.             <properties>
  69.                 <spring.profiles.active>local</spring.profiles.active>
  70.             </properties>
  71.             <activation>
  72.                 <activeByDefault>true</activeByDefault>
  73.             </activation>
  74.         </profile>
  75.         <profile>
  76.             <id>dev</id>
  77.             <properties>
  78.                 <spring.profiles.active>dev</spring.profiles.active>
  79.             </properties>
  80.         </profile>
  81.         
  82.     </profiles>
  83.     <build>
  84.         <finalName>enn-activiti</finalName>
  85.         <plugins>
  86.             <plugin>
  87.                 <groupId>org.apache.maven.plugins</groupId>
  88.                 <artifactId>maven-compiler-plugin</artifactId>
  89.                 <configuration>
  90.                     <source>${java.version}</source>
  91.                     <target>${java.version}</target>
  92.                 </configuration>
  93.             </plugin>
  94.             <plugin>
  95.                 <groupId>org.springframework.boot</groupId>
  96.                 <artifactId>spring-boot-maven-plugin</artifactId>
  97.             </plugin>
  98.             <plugin>
  99.                 <groupId>org.apache.maven.plugins</groupId>
  100.                 <artifactId>maven-surefire-plugin</artifactId>
  101.                 <configuration>
  102.                     <skip>true</skip>
  103.                     <testFailureIgnore>true</testFailureIgnore>
  104.                 </configuration>
  105.             </plugin>
  106.         </plugins>
  107.     </build>
  108. </project>

1.2. 创建启动类(componentScan是自己项目持久化模板,可以直接删掉)


  1. @SpringBootApplication(exclude = SecurityAutoConfiguration.class)
  2. @ComponentScan(basePackages = {"enn.activiti","enn.base.redis.cluster",
  3. "enn.base.utils","enn.base.mysql.ordinary","enn.base.mysql.dao"})
  4. @EnableAsync
  5. public class Application {
  6. static ConfigurableApplicationContext applicationContext;
  7. public static void main(String[] args) {
  8. applicationContext = SpringApplication.run(Application.class, args);
  9. }

}

1.3. 配置application.yml


  1. # \u670D\u52A1\u7AEF\u53E3
  2. server:
  3. port: ${SERVER_PORT:8082}
  4. #\u6570\u636E\u5E93\u94FE\u63A5\u914D\u7F6E
  5. spring:
  6. datasource:
  7. name: ecityposition
  8. type: com.alibaba.druid.pool.DruidDataSource
  9. filters: stat
  10. url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8
  11. driver-class-name: com.mysql.jdbc.Driver
  12. username: root
  13. password: root
  14. #配置初始化大小/最小/最大
  15. initial-size: 1
  16. min-idle: 1
  17. max-active: 20
  18. #获取连接等待超时时间
  19. max-wait: 60000
  20. #间隔多久进行一次检测,检测需要关闭的空闲连接
  21. time-between-eviction-runs-millis: 60000
  22. #一个连接在池中最小生存的时间
  23. min-evictable-idle-time-millis: 300000
  24. validation-query: SELECT 'x'
  25. test-while-idle: true
  26. test-on-borrow: false
  27. test-on-return: false
  28. #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
  29. pool-prepared-statements: false
  30. max-pool-prepared-statement-per-connection-size: 20
  31. jpa:
  32. properties:
  33. hibernate:
  34. hbm2ddl:
  35. auto: update
  36. jackson:
  37. date-format: yyyy-MM-dd HH:mm:ss
  38. time-zone: GMT+8
  39. activiti:
  40. check-process-definitions: false
  41. database-schema-update: true

1.4. 启动可能出现的错误

上述已经解决,直接启动没有问题

1.4.1 如果项目使用myibatis,则需要再依赖中排除persistence-api,否则会以下的错误:

Consider defining a bean of type 'javax.persistence.EntityManagerFactory' in your configuration.

1.4.2  在配置文件中设置不扫描processes文件包

如果还没有建bpmn模型,则会出现如下错误:

java.io.FileNotFoundException: class path resource [processes/] cannot be resolved to URL because it does not exist

另外,database-schema-update属性,可选值为: false,true,create-drop,drop-create,默认为true。

为true表示activiti会对数据库中的表进行更新操作,如果不存在,则进行创建。

1.4.3 在启动类上排除SecurityAutoConfiguration类,否则报:

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

因为GlobalAuthenticationConfigurerAdapter  是spring-boot-starter-security 依赖中的属于安全配置类,  而 引入的activiti-spring-boot-starter-basic 依赖中存在了一个自动安全配置类,  两个安全配置,  所以排除掉 activiti-spring-boot-starter-basic中的安全配置类  SecurityAutoConfiguration

二、编写测试流程

写的较为简单,但可通过如下进行测试,理解bpmn


  1. import enn.activiti.entity.vo.dbDict.DbDictTreeVo;
  2. import enn.activiti.entity.vo.dbDict.DbDictVo;
  3. import enn.activiti.service.ActivityConsumerService;
  4. import enn.activiti.utils.DictUtils;
  5. import enn.activiti.utils.common.ResultTreeBean;
  6. import enn.base.utils.web.ActionResult;
  7. import io.swagger.annotations.Api;
  8. import io.swagger.annotations.ApiOperation;
  9. import org.activiti.engine.ProcessEngine;
  10. import org.activiti.engine.ProcessEngines;
  11. import org.activiti.engine.task.Task;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.web.bind.annotation.*;
  15. import javax.annotation.Resource;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. import java.util.List;
  19. import java.util.Map;
  20. /**
  21. * @auther: liuxianling
  22. * @date: 2018/12/2 21:38
  23. * @description:
  24. */
  25. @RestController
  26. @RequestMapping("/api/activiti")
  27. @Api(value = "/ActivityConsumerController", description = "ActivityConsumerController")
  28. public class ActivityConsumerController {
  29. private static final Logger logger = LoggerFactory.getLogger(DbDictController.class);
  30. @Resource
  31. ActivityConsumerService activityConsumerService;
  32. /**
  33. * 1:启动流程实例
  34. */
  35. @ApiOperation(value = "启动流程实例", notes = "启动流程实例")
  36. @GetMapping("/testStartProcessInstance")
  37. public void testStartProcessInstance(@RequestParam("procdefId") String procdefId){
  38. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  39. processEngine.getRuntimeService()
  40. .startProcessInstanceById(procdefId); //这个是查看数据库中act_re_procdef表
  41. }
  42. /**
  43. * 2.完成请假申请
  44. */
  45. @ApiOperation(value = "完成请假申请", notes = "完成请假申请")
  46. @GetMapping("/testQingjia")
  47. public void testQingjia(String taskId){
  48. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  49. processEngine.getTaskService()
  50. .complete(taskId); //查看act_ru_task表
  51. }
  52. /**
  53. * 3.班主任查询当前任务
  54. */
  55. @ApiOperation(value = "班主任查询当前任务", notes = "班主任查询当前任务")
  56. @GetMapping("/taskAssignee")
  57. public void testQueryTask(String taskAssignee){
  58. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  59. List<Task> tasks = processEngine.getTaskService()
  60. .createTaskQuery()
  61. .taskAssignee(taskAssignee)
  62. .list();
  63. for (Task task : tasks) {
  64. System.out.println(task.getName());
  65. }
  66. }
  67. /**
  68. * 4.班主任完成任务
  69. */
  70. @ApiOperation(value = "班主任完成任务", notes = "班主任完成任务")
  71. @GetMapping("/testFinishTask_manager")
  72. public void testFinishTask_manager(String taskId){
  73. ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
  74. engine.getTaskService()
  75. .complete(taskId); //查看act_ru_task数据表
  76. }
  77. /**
  78. * 5.教务处主任完成任务
  79. */
  80. @ApiOperation(value = "教务处主任完成任务", notes = "教务处主任完成任务")
  81. @GetMapping("/testFinishTask_Boss")
  82. public void testFinishTask_Boss(String taskId){
  83. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  84. processEngine.getTaskService()
  85. .complete(taskId); //查看act_ru_task数据表
  86. }
  87. }

三、编写bpmn

1.1 设置编码

  1. 预防activiti乱码,还需要修改启动idea配置,增加如下

1.2 创建bpmn

1.3 编写逻辑

1. StartEvent-->点击空白处,定义流程名称-->UserTask(请假流程,定义请假人)-->UserTask(班主任审批,定义班主任)-->userTask(教导处审批,定义教导处)-->EndEvent结束流程,如图所示:

四、activiti数据库表概览

1.1 说明

Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。

并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配。

u  ACT_GE_* : “GE”代表“General”(通用),用在各种情况下;

u  ACT_HI_* : “HI”代表“History”(历史),这些表中保存的都是历史数据,比如执行过的流程实例、变量、任务,等等。Activit默认提供了4种历史级别:

Ø  none: 不保存任何历史记录,可以提高系统性能;

Ø  activity:保存所有的流程实例、任务、活动信息;

Ø  audit:也是Activiti的默认级别,保存所有的流程实例、任务、活动、表单属性;

Ø  full:最完整的历史记录,除了包含audit级别的信息之外还能保存详细,例如:流程变量。

对于几种级别根据对功能的要求选择,如果需要日后跟踪详细可以开启full

Acitiviti数据库中表的命名都是以ACT_开头的。第二部分是一个两个字符用例表的标识。此用例大体与服务API是匹配的。

l  ACT_RE_*:’RE’表示repository。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。

l  ACT_RU_*:’RU’表示runtime。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。

l  ACT_ID_*:’ID’表示identity。这些表包含标识的信息,如用户,用户组,等等。

l  ACT_HI_*:’HI’表示history。就是这些表包含着历史的相关数据,如结束的流程实例,变量,任务,等等。

l  ACT_GE_*:普通数据,各种情况都使用的数据。

1.2 概览

1.2.1   Activiti数据表清单:

表分类

表名

解释

一般数据

ACT_GE_BYTEARRAY

通用的流程定义和流程资源,用来保存部署文件的大文本数据

ACT_GE_PROPERTY

系统相关属性,存储这个流程引擎级别的数据

流程历史记录

		<p>&nbsp;</p>
</td>
<td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_ACTINST" target="_blank"></a><a target="_blank">ACT_HI_ACTINST</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的流程实例</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_ATTACHMENT" target="_blank"></a><a target="_blank">ACT_HI_ATTACHMENT</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的流程附件</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_COMMENT" target="_blank"></a><a target="_blank">ACT_HI_COMMENT</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的说明性信息</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_DETAIL" target="_blank"></a><a target="_blank">ACT_HI_DETAIL</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的流程运行中的细节信息</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_IDENTITYLINK" target="_blank"></a><a target="_blank">ACT_HI_IDENTITYLINK</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的流程运行过程中用户关系</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_PROCINST" target="_blank"></a><a target="_blank">ACT_HI_PROCINST</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的流程实例</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_TASKINST" target="_blank"></a><a target="_blank">ACT_HI_TASKINST</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的任务实例</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_HI_VARINST" target="_blank"></a><a target="_blank">ACT_HI_VARINST</a></p>
</td>
<td style="vertical-align:top;">
<p>历史的流程运行中的变量信息</p>
</td>
</tr><tr><td rowspan="4">
<p><a name="OLE_LINK62" target="_blank"></a><a name="OLE_LINK61" target="_blank">用户用户组表</a></p>
</td>
<td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_ID_GROUP" target="_blank"></a><a target="_blank">ACT_ID_GROUP</a></p>
</td>
<td style="vertical-align:top;">
<p>身份信息-组信息</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_ID_INFO" target="_blank"></a><a target="_blank">ACT_ID_INFO</a></p>
</td>
<td style="vertical-align:top;">
<p>身份信息-组信息</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_ID_MEMBERSHIP" target="_blank"></a><a target="_blank">ACT_ID_MEMBERSHIP</a></p>
</td>
<td style="vertical-align:top;">
<p>身份信息-用户和组关系的中间表</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_ID_USER" target="_blank"></a><a target="_blank">ACT_ID_USER</a></p>
</td>
<td style="vertical-align:top;">
<p>身份信息-用户信息</p>
</td>
</tr><tr><td rowspan="3">
<p><a name="OLE_LINK25" target="_blank"></a><a name="OLE_LINK24" target="_blank">流程定义表</a></p>
</td>
<td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RE_DEPLOYMENT" target="_blank"></a><a target="_blank">ACT_RE_DEPLOYMENT</a></p>
</td>
<td style="vertical-align:top;">
<p>部署单元信息,用来存储部署时需要持久化保存下来的信息</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RE_MODEL" target="_blank"></a><a target="_blank">ACT_RE_MODEL</a></p>
</td>
<td style="vertical-align:top;">
<p>模型信息</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RE_PROCDEF" target="_blank"></a><a target="_blank">ACT_RE_PROCDEF</a></p>
</td>
<td style="vertical-align:top;">
<p>已部署的流程定义,业务流程定义数据表</p> <p>此表和ACT_RE_DEPLOYMENT是多对一的关系,即,</p> <p>一个部署的bar包里可能包含多个流程定义文件,</p> <p>每个流程定义文件都会有一条记录在ACT_REPROCDEF表内,</p> <p>每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内</p> <p>的一个资源文件和PNG图片文件。和ACT_GE_BYTEARRAY</p> <p>的关联是通过程序用ACT_GE_BYTEARRAY.NAME与</p> <p>ACT_RE_PROCDEF.NAME_完成的,在数据库表结构中没有体现</p>
</td>
</tr><tr><td rowspan="6">
<p><a name="OLE_LINK13" target="_blank"></a><a name="OLE_LINK12" target="_blank">运行实例表</a></p>
</td>
<td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RU_EVENT_SUBSCR" target="_blank"></a><a target="_blank">ACT_RU_EVENT_SUBSCR</a></p>
</td>
<td style="vertical-align:top;">
<p>运行时事件</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RU_EXECUTION" target="_blank"></a><a target="_blank">ACT_RU_EXECUTION</a></p>
</td>
<td style="vertical-align:top;">
<p>运行时流程执行实例</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RU_IDENTITYLINK" target="_blank"></a><a target="_blank">ACT_RU_IDENTITYLINK</a></p>
</td>
<td style="vertical-align:top;">
<p>运行时用户关系信息,主要存储当前节点参与者的信息。</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RU_JOB" target="_blank"></a><a target="_blank">ACT_RU_JOB</a></p>
</td>
<td style="vertical-align:top;">
<p>运行时作业,运行时定时任务数据表</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RU_TASK" target="_blank"></a><a target="_blank">ACT_RU_TASK</a></p>
</td>
<td style="vertical-align:top;">
<p>运行时任务</p>
</td>
</tr><tr><td style="vertical-align:top;">
<p><a name="headLOCAL_1-ACT_RU_VARIABLE" target="_blank"></a><a target="_blank">ACT_RU_VARIABLE</a></p>
</td>
<td style="vertical-align:top;">
<p>运行时变量表</p>
</td>
</tr></tbody></table></div><p>注:</p>

l  流程文件部署主要涉及到3个表,分别是:ACT_GE_BYTEARRAY、ACT_RE_DEPLOYMENT、ACT_RE_PROCDEF。主要完成“部署包”-->“流程定义文件”-->“所有包内文件”的解析部署关系。从表结构中可以看出,流程定义的元素需要每次从数据库加载并解析,因为流程定义的元素没有转化成数据库表来完成,当然流程元素解析后是放在缓存中的,具体的还需要后面详细研究。

l  流程定义中的java类文件不保存在数据库里 。

l  组织机构的管理相对较弱,如果要纳入单点登录体系内还需要改造完成,具体改造方法有待研究。

l  运行时对象的执行与数据库记录之间的关系需要继续研究

l  历史数据的保存及作用需要继续研究。

activiti-administrator

自带的用户管理系统,维护用户和组,需要配置数据连接参数,在activiti-administrator\WEB-INF\applicationContext.xml中,并加入JDBC驱动包。

activiti-cycle

PVM活动检测的,由activiti-rest提供服务,不需配置。

activiti-explorer

可以查看用户任务和启动流程,由activiti-rest提供服务,不需配置。

activiti-kickstart

简单的点对点流程定义维护工具,需要配置数据连接,把activiti.cfg.xml文件放在classes下,并加入驱动包。

activiti-modeler

在线编辑和维护流程定义的工具,最后以文件夹方式部署,需要配置activiti-modeler\WEB-INF\classes\configuration.properties文件。

activiti-probe

PVM的观测服务,由activiti-rest提供服务,不需配置,可以查看deployment、processdefinition、processinstance、database。

activiti-rest

其他几个应用的服务提供者,需要配置数据连接,把activiti.cfg.xml文件放在classes下,并加入驱动包。

五,表结构变化

参考:https://blog.csdn.net/cs_hnu_scw/article/details/79059965

六. 具体表解析

https://blog.csdn.net/hj7jay/article/details/51302829

原文地址:https://blog.csdn.net/wudaoshihun/article/details/84655633#1.1%20%E8%AE%BE%E7%BD%AE%E7%BC%96%E7%A0%81

springboot2.04与activiti 6.0集成的更多相关文章

  1. SpringBoot2.0集成FastDFS

    SpringBoot2.0集成FastDFS 前两篇整体上介绍了通过 Nginx 和 FastDFS 的整合来实现文件服务器.但是,在实际开发中对图片或文件的操作都是通过应用程序来完成的,因此,本篇将 ...

  2. (补漏)Springboot2.0 集成shiro权限管理

    原文Springboot2.0 集成shiro权限管理 一.关于停止使用外键. 原本集成shiro建立用户.角色.权限表的时候使用了外键,系统自动创建其中两个关联表,用@JoinTable.看起来省事 ...

  3. SpringBoot2.0集成Shiro

    1.shiro的三个核心概念: 1)Subject:代表当前正在执行操作的用户,但Subject代表的可以是人,也可以是任何第三方系统帐号.当然每个subject实例都会被绑定到SercurityMa ...

  4. springboot2.04+mybatis-plus+swagger2+CodeGenerator

    @author zhangyh SpringBoot技术栈搭建个人博客[项目准备]  RESTful API就是一套协议来规范多种形式的前端和同一个后台的交互方式 原型设计 事实上,我是直接先去找的原 ...

  5. Activiti学习——Activiti与Spring集成

    转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...

  6. 2017.2.21 activiti实战--第七章--Activiti与spring集成(一)配置文件

    学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 ...

  7. ubantu16.04+mxnet +opencv+cuda8.0 环境搭建

    ubantu16.04+mxnet +opencv+cuda8.0 环境搭建 建议:环境搭建完成之后,不要更新系统(内核) 转载请注明出处: 微微苏荷 一 我的安装环境 系统:ubuntu16.04 ...

  8. 在Ubuntu Server14.04上编译Android6.0源码

    此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把An ...

  9. ubuntu 10.04 安装qt 5.0.2

    转自ubuntu 10.04 安装qt 5.0.2 从qt project网站下载下来最新的qt5.0.2套件,发现是个.run文件,添加x属性,然后直接sudo ./****.run, 提示  /l ...

随机推荐

  1. 大咖手把手教您,DLA一键建仓!

    DLA很早之前就支持了对关系型数据库的查询,但是一直以来用户会有一个担心: 直接分析RDS里面的数据会不会影响线上业务. 这个担心很合理,除非你要查询的RDS是专门用来做后台数据分析使用的,否则直接大 ...

  2. QT_获取正在运行程序的进程id(判断程序是否正在运行)

    bool checkProcessRunning(const QString &processName, QList<quint64> &listProcessId) { ...

  3. 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。

    百度为何开源深度机器学习平台?   有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举.   5月20日,百度在github上开源了其 ...

  4. Statement对象

    Statement 对象 创建 Statement 对象 在你准备使用 Statement 对象执行 SQL 语句之前,你需要使用 Connection 对象的 createStatement() 方 ...

  5. jquery文字上下滚动--单行 批量多行 文字图片上下翻滚 | 多行滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Android基础&进阶

    基础总结篇之一:Activity生命周期 基础总结篇之二:Activity的四种launchMode 基础总结篇之三:Activity的task相关 基础总结篇之四:Service完全解析 基础总结篇 ...

  7. Python 运算符括号

  8. Spring中使用DataSourceTransactionManager进行事务管理的xml配置

    在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个 ...

  9. HDU 4193

    本题思路:用sum[]数组维护前缀和, 当然这里需要把原数组扩大为原来的两倍. 然后对于任意一个长度为n的区间 k.....k+n-1,如果有该区间内的最小值大于等于sum[k-1]那么该种情况就符合 ...

  10. iis7服务器隐藏index.php

    1.安装url重写模块 32位:http://download.microsoft.com/download/4/9/C/49CD28DB-4AA6-4A51-9437-AA001221F606/re ...