Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Eclipse
- mybatis
- Express
- Sqoop
- SPC
- mapreduce
- vaadin
- Kotlin
- Python
- JavaScript
- Java
- table
- window
- plugin
- SSL
- SQL
- MSSQL
- es6
- Android
- R
- Spring
- xPlatform
- GIT
- tomcat
- NPM
- react
- IntelliJ
- 보조정렬
- hadoop
- 공정능력
Archives
- Today
- Total
DBILITY
miplatform spring mvc mybatis 연동 대용량, 고속 전송 plugin 본문
반응형
miplatform + spring mvc(3.0.1~4.3.3) + mybatis + windows 환경에서 데이터의 고속 전송과 heap oom발생 가능성을 낮춥니다.
DB Design, Data Load, SQL Statement가 Response Time을 고려하여 작성되어야 합니다.
Throughput과 Response Time을 동시(부분 범위 처리 가능한)에 충족시켜야 하는 UI에 적합하며, miplatform의 memory한계까지 데이터를 전송할 수 있습니다.
- project의 pom.xml에 dependancy를 추가하십시오.
다운로드한 파일을 maven local repository의 com/dbility/mpf/dbility-mtransfer/1.0.0/ 디렉터리에 복사하십시오.
<repositories> <repository> <id>dbility</id> <url>http://112.216.48.138/nexus/content/groups/public/</url> <releases> </releases> <snapshots> </snapshots> </repository> </repositories> <dependency> <groupId>com.dbility.mpf</groupId> <artifactId>dbility-mtransfer</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>miplatform</groupId> <artifactId>miplatform</artifactId> <version>3.2</version> </dependency>
- project의 spring mvc dispatcher-servlet.xml에 bean 설정을 추가하십시오.
① 기본 HandlerMapping에 order를 0으로 설정하고,기본 HandlerAdapter도 설정하십시오.<!-- spring 3.0.x --> <!-- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="order" value="0" /> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> --> <!-- spring 3.1.x --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="order" value="0" /> </bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <bean id="mtransferSpringSupport" class="com.dbility.support.spring.miplatform.InitializationBean"> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <property name="defaultSqlNameSpace" value="com.dbility.web.system.mapper" /> <property name="sessionEnabled" value="false" /> <property name="sessionErrorMsg" value="sessionTimeout" /> <property name="sessionVariable" value="userId" /> <property name="outputDatasetName" value="dsOutput" /> <property name="useCamelCase" value="true" /> </bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="order" value="1" /> <property name="mappings"> <props> <prop key="/mtransfer.action">mtransferController</prop> </props> </property> </bean> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
Spring 3.1 이후 버전이면 RequestMappingHandlerMapping이 기본 HandlerMapping이며,
Spring 3.1 이전 버전이면 DefaultAnnotationHandlerMapping이 기본 HandlerMapping입니다.
(DefaultAnnotationHAndlerMapping은 3.1부터 deprecated 되고 RequestMappingHandlerMapping으로 대체되었습니다.)
SimpleUrlHandlerMapping의 mapping key는 자유롭게 변경하여 사용할 수 있습니다.
② sqlSessionFactory.
- org.mybatis.spring.SqlSessionFactoryBean에 의해 생성될 bean reference입니다.
③ defaultSqlNameSpace.
- 지정할 경우 지정된 mybatis mapper의 namespace 하위에서 sqlId를 검색합니다. default는 미지정입니다.
④ sessionEnabled.
- 세션을 사용할 경우 true로 설정하십시오. default는 false입니다.
⑤ sessionErrorMsg.
- 세션을 사용할 경우 오류 시 전송되는 오류 메시지 값입니다. default는 "Invalid session"입니다.
⑥ sessiolnVariable.
- 세션을 사용할 경우 check시 사용할 서버용 세션 변수입니다. default는 미지정입니다.
⑦ outputDatasetName.
- 서버 응답 시 전송되는 dataset명으로 자유롭게 변경하여 사용할 수 있습니다. default는 "dsOutput"입니다.
송수신 프로토콜 버전은 4000, charset은 UTF-8입니다.
⑧ useCamelCase.
- true시 dataset의 column명에 camelcasing이 적용되며, default true입니다.
false시 meta정보에 따라 달라집니다.
※ sqlSessionFactory를 제외한 property는 생략할 수 있으며, 오류 발생 시 ErrorCode는 -1입니다. - miplatform transaction script 예제입니다. script는 miplatform manual을 참조하십시오.
sqlId이후의 parameter는 sql binding parameter이며, 순서와 관계없이 BLANK로 구분됩니다.var startTime,endTime,cnt=0; function btnSearch_OnClick(obj) { this.SetCapture(); this.SetWaitCursor(false); this.dsList.Clear(); this.dsList.FireFirstCount = 100; this.dsList.FireNextCount = 1000; var strSvcID = "testSvc"; var strURL = "svcJsp::mtransfer.action"; var strInDatasets = ""; var strOutDatasets= "dsList=dsOutput"; var strArgument = "firstCount=100 " + "NextCount=1000 " + "sqlId=findList " + "searchFromDt=20161101 "+ "searchToDt=20161101"; var strCallbackFunc = "callback"; var strThreadPriority = "FirstNew"; startTime = Timem(); Transaction(strSvcID,strURL,strInDatasets,strOutDatasets,strArgument,strCallbackFunc,strThreadPriority); } function callback(nSvcID,nError,nErrorMsg) { this.SetWaitCursor(true); this.ReleaseCapture(); if ( nError < 0 ){ alert(nErrorMsg); return; } switch(nSvcID) { case "testSvc" : this.dsList.rowposition = 0; break; default : break; } } function dsList_OnLoadCompleted(obj,nErrorCode,strErrorMsg,nReason) { if (nReason==0){ this.staStatus.Color = "red"; this.staStatus.Text = "경과시간: "+fn_elapsedTime(Timem(),startTime)+" "+obj.GetRowCount()+" 건이 조회되었습니다."; } else if (nReason==20){ this.staStatus.Text = "경과시간: "+fn_elapsedTime(Timem(),startTime)+" "+obj.GetRowCount()+" 건이 조회되었습니다."; } } function fn_elapsedTime(dFrom, dTo) { var nGap = (dFrom - dTo) / 1000; var nSec = nGap % 60; var nMin = floor(nGap/(60)) % 60; var nHour = floor(nGap/(60 * 60)) % 24; var nDay = floor(nGap/(60 * 60 * 24)); var sRtn = nGap+ " 초"; return sRtn; }
sqlId는 mybatis mapper에 기술된 id입니다.
① bean설정의 defalutSqlNameSpace 지정 시 그 하위에서 sqlId를 찾습니다. namespace가 제외된 id만 입력합니다.
② bean설정의 defaultSqlNameSpace 미지정시 mybatis mapper의 namespace가 포함된 id를 입력합니다.
※ bean설정의 defaultSqlNameSpace property를 설정하지 않고, sqlId에도 namespace를 지정하지 않을 경우,
mybatis mapper내에서 sql id가 유일하다면 정상 작동됩니다.
서버 응답 contents type은 PlatformBinary, charset은 UTF-8입니다.
input dataset은 sql mapper에 사용될 collection으로 List<Map>type으로 변환되며,IN조건에 사용하기 적합하도록 동적 SQL 중 foreach등에 collection으로 사용할 수 있습니다.
collection명은 dataset명으로 자동 변환되며, bean설정의 camecasing여부에 영향을 받습니다.
처리 가능한 dataset의 개수는 0부터 N개까지입니다.
<!--?xml version="1.0" encoding="UTF-8"?--> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.dbility.web.system.mapper"> <select id="findList" resultType="java.util.HashMap" resultSetType="FORWARD_ONLY" statementType="PREPARED"> SELECT A.MCHID ,A.L1 ,A.L2 ,A.V1 ,A.V2 ,A.V3 ,A.DT FROM DUMMY A WHERE 1=1 AND A.MCHID IN <foreach collection="input" item="item" open="(" close=")" separator=","> #{item.mChid} </foreach> AND ROWNUM <= 100000 </select> </mapper>
- 라이선스 파일 ( MTRANSFER_License.xml ) 은 Application Context의 classpath 최상위(webapp/WEB-INF/classes/)에 위치하여야 합니다.
deploy assignment를 확인하세요. maven project의 경우 src/main/resources/입니다.
반응형
'products' 카테고리의 다른 글
xplatform spring mvc mybatis 연동 대용량, 고속 전송 plugin (0) | 2017.06.25 |
---|
Comments