DBILITY

독거 가능성 100% 노후에 라면값이라도 하게 센스를 발휘합시다!😅
Please click on the ad so that I can pay for ramen in my old age!
点击一下广告,让老后吃个泡面钱吧!
老後にラーメン代だけでもするように広告を一回クリックしてください。

xplatform spring mvc mybatis 연동 대용량, 고속 전송 plugin 본문

products

xplatform spring mvc mybatis 연동 대용량, 고속 전송 plugin

DBILITY 2017. 6. 25. 08:13
반응형

plugin인 기반으로 모기업 프로젝트에 1000만 ROW이상 xplatform grid에 디스플레이 하였습니다.물론 1000만개의 데이터를 1초에 하나씩 확인하더라도 약 4개월이 걸릴텐데ㅎㅎ

xplatform + spring mvc(3.0.1~4.3.3) + mybatis + windows 환경에서 데이터의 고속 전송과 heap oom발생 가능성을 낮춥니다.
DB Design, Data Load, SQL Statement가  Response Time을 고려하여 작성되어야 합니다.
Throughput과 Response Time을 동시(부분 범위 처리 가능한)에 충족시켜야 하는 UI에 적합하며, xplatform의 memory한계까지 데이터를 전송할 수 있습니다.

dbility-xtransfer-1.0.0.jar
다운로드
XTRANSFER_License.xml
0.00MB

  1. project의 pom.xml에 repository 및 dependancy를 추가한다.
    pom.xml
    0.00MB
    직접 다운로드한 경우 jar파일을 maven local repository의 com/dbility/xpf/dbility-xtransfer/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.xpf</groupId>
        <artifactId>dbility-xtransfer</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.2.2</version>
    </dependency>
    <dependency>
       <groupId>xplatform-xapi</groupId>
       <artifactId>xplatform-xapi</artifactId>
       <version>1.0</version>
    </dependency>


  2. project의 spring mvc dispatcher-servlet.xml에 bean 설정을 추가한다.
    dispatcher-servlet.xml
    다운로드
    <!-- 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="xtransferSpringSupport" class="com.dbility.support.spring.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="/xtransfer.action">xtransferController</prop>
    		</props>
    	</property>
    </bean>
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    ① 기본 HandlerMapping에 order를 0으로 설정하고, 기본 HandlerAdapter도 설정하십시오.
        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"입니다.
          contents type은 PlatformBinary, charset은 UTF-8입니다.
    ⑧ useCamelCase.
       - true시 dataset의 column명에 camelcasing이 적용되며, default true입니다.
          false시 meta정보에 따라 달라집니다.
    ※ sqlSessionFactory를 제외한 property는 생략할 수 있으며, 오류 발생 시 ErrorCode는 -1입니다.
  3. xplatform transaction script 예제입니다. xscript는 xplatform manual을 참조하십시오.

    application.usewaitcursor = false;
    application.httpretry = 1;
    application.httptimeout = 300;
    dataset.firefirstcount = 100;
    dataset.firenextcount = 100;
    transaction(
             "ServiceId" ,
             "http://server:port/context/xtransfer.action",
             "input=dsList",
             "dataset=dsOutput",
             "firstCount=100 nextCount=100 sqlId=SQL_ID searchFromDate=20140610 searchToDate=20140610",
             "Transaction_Callback",true,1,true
    );


    sqlId이후의 parameter는 sql binding parameter이며, 순서와 관계없이 BLANK로 구분됩니다.
    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>​
  4. 라이선스 파일 ( XTRANSFER_License.xml ) 은 Application Context의 classpath 최상위(webapp/WEB-INF/classes/)에 위치하여야 합니다.
    deploy assignment를 확인하세요. maven project의 경우 src/main/resources/입니다.

 

반응형
Comments