zoukankan      html  css  js  c++  java
  • 工作流性能优化(敢问activiti有扩展性?)(1)

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

    用VisualVM做性能测试;

    之前同事给的解决方案:

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

    2、Windows: 修改tomcatincatalina.bat文件,“set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%”后添加一行“set JAVA_OPTS=%JAVA_OPTS% -javaagent:%CATALINA_HOME%libspring-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;

    clip_image002

    也不行;

    linux下可以;

    修改tomat配置:

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

    clip_image004

    clip_image006

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

    安装VisualVM;

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

    VisualVM中文在线文档

    启动,需要jdk7;

    clip_image007

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

    "D:J2EEvisualvm_138etcvisualvm.conf"

    clip_image008

    还原原来的配置,备份:

    -javaagent:D:J2EEapache-tomcat-6.0.43libspring-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兼容性问题;

    clip_image010

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

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

    ativiti用户手册

    明天继续;

  • 相关阅读:
    ios in-house 公布整个过程(startssl认证)
    各种图的创建以及广度,深度优先遍历(临接矩阵存储)
    SWTBOK測试实践系列(1) -- 測试在项眼下期的评审投入划算吗?
    欢天喜地迎国庆,国产开源编程语言 RPP 1.87 公布!
    正确地在QML应用中使用fontsize
    iOS 9音频应用播放音频之第一个ios9音频实例
    iOS 9音频应用播放音频之ios9音频基本功能
    iOS 9音频应用开发基础教程
    MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址
    检验Xcode是否被改动过的简单方法,不妨试试!!!
  • 原文地址:https://www.cnblogs.com/yejq/p/4451125.html
Copyright © 2011-2022 走看看