工做流性能優化(敢問activiti有擴展性?)(1)

工做流待辦(首頁待辦列表),加載緩慢,activiti本機,看了代碼又是所有數據加載到內存,而後代碼過濾,我爲何又說又呢?html

用VisualVM作性能測試;java

 

以前同事給的解決方案:linux

一、把「spring-instrument-3.2.1.RELEASE.jar」放到tomcat的lib目錄下;web

二、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」;spring

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」;sql

三、修改項目中的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"/>」;數據庫

 

原理:apache

AspectJ提供了兩種切面織入方式,第一種經過特殊編譯器,在編譯期,將AspectJ語言編寫的切面類織入到Java類中,能夠經過一個Ant或Maven任務來完成這個操做;第二種方式是類加載期織入,也簡稱爲LTW(Load Time Weaving)。tomcat

Spring之LoadTimeWeaver——一個需求引起的思考mybatis

 

試試這樣配置能不能啓動項目先;

先用外置的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:\J2EE\visualvm_138\etc\visualvm.conf"

clip_image008

 

還原原來的配置,備份:

-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值:
一、show_sql:是否顯示SQL語句
二、format_sql: 是否格式化輸出字符串,加強SQL的可讀性
三、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用戶手冊

 

明天繼續;

相關文章
相關標籤/搜索