工作流性能优化(敢问activiti有扩展性?)(1)

工作流待办(首页待办列表),加载缓慢,activiti本机,看了代码又是全部数据加载到内存,然后代码过滤,我为什么又说又呢?

用VisualVM做性能测试;

 

之前同事给的解决方案:

1、把“spring-instrument-3.2.1.RELEASE.jar”放到tomcat的lib目录下;

2、Windows: 修改tomcat\bin\catalina.bat文件,“set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%”后添加一行“set JAVA_OPTS=%JAVA_OPTS% -javaagent:%CATALINA_HOME%\lib\spring-instrument-3.2.1.RELEASE.jar”;

Linux: 修改tomcat/bin/catalina.sh文件,“# Uncomment the following line to make the umask available when using the”前添加一行“JAVA_OPTS=-javaagent:$CATALINA_HOME/lib/spring-instrument-3.2.1.RELEASE.jar”;

3、修改项目中的spring-context.xml文件,“<bean class="com.sinotaiyo.srpm.ApplicationContextUtil" />”后添加一行“<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>”,“<property name="dataSource" ref="dataSource" />”后添加一行“<property name="loadTimeWeaver" ref="loadTimeWeaver"/>”;

 

原理:

AspectJ提供了两种切面织入方式,第一种通过特殊编译器,在编译期,将AspectJ语言编写的切面类织入到Java类中,可以通过一个Ant或Maven任务来完成这个操作;第二种方式是类加载期织入,也简称为LTW(Load Time Weaving)。

Spring之LoadTimeWeaver——一个需求引发的思考

 

试试这样配置能不能启动项目先;

先用外置的tomcat配置好启动项目试试;

改好,启动报错:

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener

java.lang.IllegalStateException: Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation.

at org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver.addTransformer(InstrumentationLoadTimeWeaver.java:87)

 

修改tomcat配置为使用外置的tomcat;

也不行;

linux下可以;

修改tomat配置:

加上启动vm参数,就可以了;

tomcat7-maven-plugin启动也加入启动vm参数就可以;

 

安装VisualVM;

http://visualvm.java.net/download.html,下载多国语言包的版本,解压就可以用了;

VisualVM中文在线文档

启动,需要jdk7;

虽然机器上已经安装了java_home,但还是要自己修改配置;搜索:visualvm_jdkhome

"D:\J2EE\visualvm_138\etc\visualvm.conf"

 

还原原来的配置,备份:

-javaagent:D:\J2EE\apache-tomcat-6.0.43\lib\spring-instrument-3.2.1.RELEASE.jar

 

生成10万数据供测试:

首先,找出Hibernate打印SQL及附加参数

在Hibernate的配置文件hibernate.cfg.xml中有3个设置项跟显示SQL语句相关,他们的值都是boolean值:
1、show_sql:是否显示SQL语句
2、format_sql: 是否格式化输出字符串,增强SQL的可读性
3、use_sql_comments:是否显示注释,用于指示出是什么操作产生了这个SQL语句。

如果设置了show_sql=true的话默认只打印SQL语句不会打印参数:

如果需要打印参数请在log4j配置文件:log4j.properties中加入:

log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

log4j.loggerorg.hibernate.type.descriptor.sql.BasicExtractor=TRACE

如果需要查看查询中命名参数的值,继续加入:

log4j.logger.org.hibernate.engine.QueryParameters=DEBUG

log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG

接下来奉上全部配置:

log4j.rootLogger=info, CA

# ConsoleAppender

log4j.appender.CA=org.apache.log4j.ConsoleAppender

log4j.appender.CA.layout=org.apache.log4j.PatternLayout

log4j.appender.CA.layout.ConversionPattern=%d{hh\:mm\:ss,SSS} [%t] %-5p %c %x - %m%n

#为了显示参数

log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

log4j.loggerorg.hibernate.type.descriptor.sql.BasicExtractor=TRACE

#查看查询中命名参数的值

log4j.logger.org.hibernate.engine.QueryParameters=DEBUG

log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG

使用时只需要将hibernate.cfg.xml中的show_sql设置为true然后将红色代码复制到配置文件中即可。

 

刚刚问了工作流走的是mybatis,不是hibernate,好吧;

debug一下跟一下sql;

还是度娘好,搜出来了;

Activiti中彻底解决待办事项列表查询复杂、API不友好的设计方案

 

分析上述缺点和需求后,我们认为通过API方式进行查询的话,总是有各种缺陷,因此把目标放在数据库上,如果能通过定义视图的方式解决问题,那么将彻底解决查询的方便性、灵活性、通用性问题。

经过分析Activiti的数据库表,我们发现并不复杂,和待办事项有关系的表,包括ACT_RU_TASK、ACT_RU_IDENTITYLINK,ACT_RU_TASK中存储了任务相关信息,ACT_RU_IDENTITYLINK中存储了候选组和候选人信息,这里面一个比较重要的问题就是,Activiti中的候选组、候选人如何跟系统中的用户、组织、角色对应的问题,本文提供的解决方案,假定系统中有一张名为SYS_ROLE_USER的表,该表中存储了角色和用户的对应关系,并且Activiti中的候选组和角色是同一个概念,开发者的系统中具体是什么情况,需要开发者举一反三,本文仅提供一个设计思路。

找sql困难,就从页面找新增工作流的地方,找到对应的代码,写程序生成就可以了;

 

原来的开发人员说在加载待办的代码里边加个for循环,重复加载待办数据,这个方案后边试试;

MD,js兼容性问题;

创建个工作流道路也很长啊;

代码也封装得非常好,一时半会摸不着头脑,怎么办呢?

ativiti用户手册

 

明天继续;

时间: 2024-10-10 13:19:43

工作流性能优化(敢问activiti有扩展性?)(1)的相关文章

工作流性能优化(敢问activiti有扩展性?)(3)

2015/4/20 周末回去想了下,hibernate.mybatis.jdbc,都行,最终定了用mybatis,谁叫它这么优雅,acvtiviti是依赖了mybatis的,就不用再引入包了: 看了配置文件,之前配置的是jpa,再配置mybatis,配置文件就显得臃肿,很乱了:用jpa吧,貌似也不赖: 再写一个Repository: 写SQL的时候用到了,知识点: instr:instr(t.DESCRIPTION_, 'conditionCountersign') > 0 mysql查询最后一

工作流性能优化(敢问activiti有扩展性?)(2)

2015/4/17 粗略看了activiti的sql的,在ativity engine包里边: 没什么头绪,先用excel记录数据量少的时候本机的性能情况:   不打印hibernate的sql:一刷一大片,还不输出参数是什么,这样的语句有什么意义哦,怀念mybatis: <property name="showSql" value="false" />   让程序充分加载,取第三次的结果: 开始时间:2015-04-17 09:38:20.611 总记

C#大型电商项目优化(三)——扩展性与支付

上一篇文章引来不少非议,笔者并非对EF有看法,而是针对不同的业务场景和框架背景,挑选不同的方案.每个方案都有其优势劣势,挑选最快速,最简单的方案,是笔者的初衷. 看评论也是学习的过程,然而有些只做评价,却不道明原委的评论,也确实让笔者感受到了些许来自世界的恶意^_^ 开个玩笑,下面进入正题,之前系统的支付部分只需要支持支付宝和财付通,且支付代码是写在一个页面文件里的,也就是说,这个页面文件包含了支付宝和财付通的支付请求.支付同步回调和异步回调.且不说代码混乱可读性差,其可扩展性也实在不敢恭维.其

火狐的34条军规(前端性能优化)

性能优化:          1.稳定性 2.扩展性 3.优化 yelow: Chrome     F12     NetWork         需要经验 firefox         YSLow     yahoo 安装插件      必须有firebug        3.6之后的火狐都不兼容 标签 yslow.org/mobile 不能检测https协议的网址 对咱们没有影响 工具:学习的东西 雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 po

深入NGINX:我们如何设计它的性能和扩展性

英文原文:Inside NGINX: How We Designed for Performance & Scale 为了更好地理解设计,你需要了解NGINX是如何工作的.NGINX之所以能在性能上如此优越,是由于其背后的设计.许多web服务器和应用服务器使用简单的线程的(threaded).或基于流程的(process-based)架构, NGINX则以一种复杂的事件驱动(event-driven)的架构脱颖而出,这种架构能支持现代硬件上成千上万的并发连接. Inside NGINX info

asp.net的10个提升性能或扩展性的秘密(一) 转自网络

简介 Asp.net有很多值得你挖掘的“秘密”,当你发现了它们,将会给你网站的性能和可扩展性带来巨大提升!例如,对于Membership以及Profile提供程序有一些秘密的瓶颈,它们很容易被解决,从而使认证和授权更加快速.另外,asp.net的http管线可以为每一个请求作处理,防止执行了某些不必要的代码而遭受攻击.不只是这些,asp.net工作进程能够突破默认限制,从而完全发挥它的威力.在浏览器端(不是在服务器端)的页面分段输出缓存能显著减少由于请求访问所需要占用的大量下载时间.在需要的用户

【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强

本文转自:http://www.trinea.cn/android/preloaddatacache/ 本文主要介绍一个支持自动向前或向后获取新数据的缓存的使用及功能.Android图片内存缓存可见ImageCache. 主要特性:(1).使用简单  (2).可自动预取新数据  (3).可选择多种缓存算法(包括FIFO.LIFO.LRU.MRU.LFU.MFU等15种)或自定义缓存算法  (4).省流量性能佳(有且仅有一个线程获取数据)  (5).支持不同类型网络处理  (6)缓存可序列化到本地

【Java/Android性能优5】 Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

本文转自:http://www.trinea.cn/android/android-imagecache/ 主要介绍一个支持图片自动预取.支持多种缓存算法.支持二级缓存.支持数据保存和恢复的图片缓存的使用.功能及网友反馈的常见问题解答. 与Android LruCache相比主要特性:(1). 使用简单  (2). 轻松获取及预取新图片  (3). 包含二级缓存  (4). 可选择多种缓存算法(FIFO.LIFO.LRU.MRU.LFU.MFU等 13种)或自定义缓存算法  (5). 可方便的保

MySQL 复制 - 性能与扩展性的基石 1:概述及其原理

原文:MySQL 复制 - 性能与扩展性的基石 1:概述及其原理 1. 复制概述 MySQL 内置的复制功能是构建基于 MySQL 的大规模.高性能应用的基础,复制解决的基本问题是让一台服务器的数据与其他服务器保持同步. 接下来,我们将从复制概述及原理.复制的配置.常见的问题及解决方法来学习 MySQL 的复制功能. 1.1 复制解决的问题 下面是复制常见的用途: 数据分布.Mysql 复制通常不会对带宽造成很大压力,但在 5.1 版本中引入的基于行的复制会比传统的基于语句的复制模式产生更大的带