如何在Activiti 5.14中显示SQL查询?JDK6下TaskQuery预查SQL方法
针对你在JDK6环境下使用Activiti 5.14,想要查看TaskQuery构建的SQL语句的需求,最直接的方式是通过配置MyBatis的日志输出来实现——因为Activiti底层依赖MyBatis执行数据库操作,所以开启MyBatis的SQL日志就能看到生成的查询语句。
下面是具体的实现步骤:
1. 配置日志框架(以Log4j 1.x为例,适配JDK6)
因为JDK6对新版本日志框架支持有限,推荐使用Log4j 1.x(Log4j 2.x从2.3版本开始不再支持JDK6)。在你的log4j.properties文件中添加以下配置:
# 开启Activiti MyBatis相关的日志输出 log4j.logger.org.apache.ibatis=DEBUG log4j.logger.org.activiti.engine.impl.persistence.entity=DEBUG log4j.logger.org.activiti.engine.impl.persistence.entity.TaskEntity=DEBUG
如果是使用Logback的话(需选择支持JDK6的版本,比如Logback 1.2.x之前的版本),在logback.xml中添加:
<logger name="org.apache.ibatis" level="DEBUG"/> <logger name="org.activiti.engine.impl.persistence.entity" level="DEBUG"/> <logger name="org.activiti.engine.impl.persistence.entity.TaskEntity" level="DEBUG"/>
2. 针对TaskQuery的实际效果
当你编写类似这样的TaskQuery代码时:
TaskQuery taskQuery = taskService.createTaskQuery() .taskAssignee("john") .taskNameLike("%approval%"); List<Task> tasks = taskQuery.list();
开启上述日志后,你会在控制台或日志文件中看到清晰的SQL输出,示例如下:
DEBUG [org.apache.ibatis.logging.jdbc.BaseJdbcLogger] - ==> Preparing: SELECT RES.* FROM ACT_RU_TASK RES WHERE RES.ASSIGNEE_ = ? AND RES.NAME_ LIKE ? ORDER BY RES.ID_ ASC
DEBUG [org.apache.ibatis.logging.jdbc.BaseJdbcLogger] - ==> Parameters: john(String), %approval%(String)
这样就能完整看到Activiti通过TaskQuery构建的SQL语句,以及对应的参数值。
3. 实用注意事项
- 日志框架版本必须适配JDK6,避免出现兼容性报错;
- 生产环境建议关闭DEBUG级别日志,避免不必要的性能损耗;
- 如果只需要查看Task相关的SQL,可以仅配置
org.activiti.engine.impl.persistence.entity.TaskEntity的DEBUG级别,减少冗余日志输出。
内容的提问来源于stack exchange,提问作者Mohamed Ennahdi El Idrissi

