Skip to content

context *.xml 주요 설정

eGovFrameSupport edited this page Apr 6, 2023 · 1 revision
  • 추가 설정 파일들은 템플릿 프로젝트 소스의 각 resource/egovframework/spring/com/폴더 아래에 위치한다.
  • anontation, aop, schedule, validation, security, id-generation, mapper, transaction 관련 설정정보가 등록된다.(템플릿 종류별로 차이 있음)

context-aspect.xml의 ExceptionTransfer 설정(템플릿 서비스 임플 클래스에서 발생하는 경우는 Exception에 대한 개별 로그를 출력)

    <!-- 내부업무의 기능 작동과정에서 Exception 발생 시 후처리를 위한 AOP설정  -->
    <aop:config>
        <aop:pointcut id="serviceMethod" expression="execution(* egovframework.let..impl.*Impl.*(..)) or execution(* egovframework.com..impl.*Impl.*(..))" />
 
        <aop:aspect ref="exceptionTransfer">
            <aop:after-throwing throwing="exception" pointcut-ref="serviceMethod" method="transfer" />
        </aop:aspect>
    </aop:config>
    ...

context-common.xml의 egovMessageSource 설정(프로퍼티 파일에 등록된 메시지 활용), leavaTrace 설정(Exception 발생 시 개별 Trace 출력)

    <!-- 메시지소스 빈 설정 -->
    <bean id="egovMessageSource" class="egovframework.com.cmm.EgovMessageSource">
        <property name="reloadableResourceBundleMessageSource">
            <ref bean="messageSource" />
        </property> 
    </bean>
    ...
 
    <!-- Exception 발생 시 후처리용 별도 작업을 위해 실행환경의 LeveaTrace를 활용하도록 설정 -->
    <bean id="leaveaTrace" class="org.egovframe.rte.fdl.cmmn.trace.LeaveaTrace">
        <property name="traceHandlerServices">
            <list>
                <ref bean="traceHandlerService" />
            </list>
        </property>
    </bean> 
    ...
 
    <!-- 소스 내에서 egovMessageSource의 사용 예
        @Resource(name="egovMessageSource")
        EgovMessageSource egovMessageSource;
        String message = egovMessageSource.getMessage("fail.common.login");
    -->
    <!-- 소스 내에서 사용 예(템플릿에서는 특별한 후속 처리 없으므로 로그아웃 시에 샘플 소스만 적용함)
    @Resource(name="leaveaTrace")
    LeaveaTrace leaveaTrace;
    ...
    } catch (ArithmeticException athex) {
        // TraceHandler에서 메시지에 따른 후속조치 등을 처리할 수 있다.
        leaveaTrace.trace("fail.common.msg", this.getClass());
    }
    ...
    -->

context-datasource.xml의 datasource 설정

    <!-- 환경설정 기본정보를 globals.properties 에서 참조하도록 propertyConfigurer 설정  -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/egovframework/egovProps/globals.properties</value>
                <!-- value>file:/product/jeus/egovProps/globals.properties</value-->
            </list>
        </property>
    </bean>
 
    <!-- datasource 설정(propertyConfigurer 활용) -->
    <alias name="dataSource-${Globals.DbType}" alias="dataSource" />
    <alias name="dataSource-${Globals.DbType}" alias="egov.dataSource" />
 
    <!-- mysql -->
    <bean id="dataSource-mysql" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${Globals.DriverClassName}"/>
        <property name="url" value="${Globals.Url}" />
        <property name="username" value="${Globals.UserName}"/>
        <property name="password" value="${Globals.Password}"/>
    </bean>
    ...
 
    <!-- DB 5개 종류에 대한 정의 샘플이 존재한다. --> 
    <!-- 홈페이지 템플릿 globals.properties의 dbtype을 hsql로 변경후 아래 설정을 사용하여 간단한 테스트가 가능하다. -->
    <bean id="dataSource-hsql" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
	<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
	<property name="url" value="jdbc:log4jdbc:hsqldb:hsql://localhost/sampledb"/>
	<property name="username" value="sa"/>
    </bean>

context-idgen.xml의 업무 별 일련번호 생성 서비스 설정

    <!-- 시스템에서 업무 별로 레코드 신규발생 시 일련번호를 생성하는 bean 클래스 설정 -->
    <!-- 첨부파일 ID Generation  Config-->
    <bean name="egovFileIdGnrService"
        class="org.egovframe.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl"
        destroy-method="destroy">
        <property name="dataSource" ref="dataSource-${Globals.DbType}" />
        <property name="strategy" ref="fileStrategy" />
        <property name="blockSize"  value="10"/>
        <property name="table"      value="IDS"/>
        <property name="tableName"  value="FILE_ID"/>
    </bean>
    <!-- 첨부파일 ID Generation  Strategy Config -->
    <bean name="fileStrategy"
        class="org.egovframe.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
        <property name="prefix" value="FILE_" />
        <property name="cipers" value="15" />
        <property name="fillChar" value="0" />
    </bean>
    ...
 
    <!-- 소스 내 사용 예
       ...
    @Resource(name = "egovFileIdGnrService")
    private EgovIdGnrService idgenService;
    ...
    String newId = idgenService.getNextStringId();
    ...
    -->

context-properties.xml의 프로퍼티 값 설정

    <!-- 프로퍼티 정보 설정 -->
    <bean name="propertiesService" class="org.egovframe.rte.fdl.property.impl.EgovPropertyServiceImpl" destroy-method="destroy">
        <property name="properties">
            <map>
                <entry key="pageUnit" value="10"/>
                <entry key="pageSize" value="10"/>
                <entry key="posblAtchFileSize" value="5242880"/>
                <entry key="Globals.fileStorePath" value="/user/file/sht/"/>
                <entry key="Globals.addedOptions" value="false"/>
            </map>
        </property>
    </bean>
 
    <!-- 소스 내 사용 예
    @Resource(name = "propertiesService")
    protected EgovPropertyService pService;
    ...
    String savePath = pService.getString("Globals.fileStorePath");
    ...
    -->

context-mapper.xml의 프로퍼티 값 설정

    <!-- 소스 내 DAO에서 사용할 쿼리문의 위치정보를 확인 bean 설정으로 Dao 클래스에서 extends하는 EgovAbstractMapper 내부에 포함하여 사용 -->
    <!-- configLocations properties 항목에 쿼리문 위치정보 파일들을 등록(각 위치정보 파일 내에 실제 쿼리문들이 포함된 파일들의 위치정보가 존재) --> 
	<!-- Mybatis setup for Mybatis Database Layer -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">		
		<property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:/egovframework/mapper/config/mapper-config.xml" />
 
		<property name="mapperLocations">
			<list>
				<value>classpath:/egovframework/mapper/let/**/*_${Globals.DbType}.xml</value>
			</list>
		</property>
	</bean>
    ...
 
    <!-- 소스 내 사용 예 (DAO 클래스 정의 시 extends를 통해 자동으로 사용 -->
    <!-- com.sqlMapClient 와 같이 새로 지정한 후 EgovAbstractMapper를 재정의하여 사용할 수도 있음(소스 내 설정 참고) --> 
    @Repository("BBSAttributeManageDAO") 
    public class BBSAttributeManageDAO extends EgovAbstractMapper {
    ...

context-transaction.xml의 트랜잭션 설정

    <!-- transaction 설정 -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
    </bean>
 
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="*" rollback-for="Exception"/>
        </tx:attributes>
    </tx:advice>
 
    <aop:config>
        <aop:pointcut id="requiredTx" expression="execution(* egovframework.let..impl.*Impl.*(..)) or execution(* egovframework.com..*Impl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
    </aop:config>
 
        <!-- 템플릿에서는 서비스 임플 클래스 내의 함수 내에서 트랜잭션을 처리한다.(Exception 발생 시 임플 클래스의 함수 내에서 호출된 DAO 함수들의 처리결과가 모두 롤백됨) -->

context-validator.xml의 Vaildator설정

    <!-- Integration Apache Commons Validator by Spring Modules -->             
    <bean id="beanValidator" class="org.springmodules.validation.commons.DefaultBeanValidator">
    	<property name="validatorFactory" ref="validatorFactory"/>
    </bean>
 
    <bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
	    <property name="validationConfigLocations">
	        <list>
	            <!-- 경량환경 템플릿 밸리데이터 설정 -->
	            <value>classpath:/egovframework/validator/validator-rules-let.xml</value>
	            <value>classpath:/egovframework/validator/let/**/*.xml</value>        
	        </list>
	    </property>
    </bean>
 
    <!-- validationConfigLocations 프로퍼터로 등록된 xml파일 내에 validation시 사용될 함수와 validation의 대상이 되는 form 정보가 등록된다. -->
    <!-- classpath:/egovframework/validator/validator-rules-let.xml 내용 예 
        ...
        <validator name="required"
        ...
        <javascript><![CDATA[
            function validateRequired(form) {
                var isValid = true;
                ...
    -->
    <!-- classpath:/egovframework/validator/let/*.xml 내용 예 
        ...
        <validator name="required"
        ...
        <javascript><![CDATA[
            function validateRequired(form) {
                var isValid = true;
                ...
    -->
    <!--
        <formset>
		    <form name="boardMaster">
			    <field property="bbsNm" depends="required">
        		    <arg0 key="cop.bbsNm" />
        		</field>
            ...
    -->

context-security.xml의 스프링 시큐리티 설정 (내부업무 템플릿, 포털사이트 템플릿 해당)

context-excel.xml의 excel파일 컨트롤 설정(내부업무 템플릿 해당)

	<bean id="excelZipService" class="org.egovframe.rte.fdl.excel.impl.EgovExcelServiceImpl">
		<property name="mapClass" value="egovframework.let.sym.ccm.zip.service.impl.EgovCcmExcelZipMapping" />
		<property name="sqlSessionTemplate" ref="egov.sqlSessionTemplate" />
	</bean>
    <!-- 소스 내 사용 예 (엑셀 컬럼 정보를 설정한 후 정보 설정한 후 (템플릿의 EgovCcmExcelZipMapping 클래스 참조) 엑셀업로드 시 uploadExcel 함수 사용)
           ...
           excelZipService.uploadExcel("ZipManageDAO.insertExcelZip", file, 2, (long) 5000);
      ...
    -->

context-scheduling-sym-log-lgm.xml의 일 단위 접속통계 스케쥴링 설정(내부업무 템플릿 해당)

	<!-- 시스템 로그 요약  -->
	<bean id="sysLogging" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="egovSysLogScheduling" />
		<property name="targetMethod" value="sysLogSummary" />
		<property name="concurrent" value="false" />
	</bean>
 
	<!-- 시스템 로그 요약  트리거-->
	<bean id="sysLogTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
		<property name="jobDetail" ref="sysLogging" />
		<!-- 시작하고 1분후에 실행한다. (milisecond) 60000-->
		<property name="startDelay" value="30000" />
		<!-- 매 24시간마다 실행한다.864000000 (milisecond) -->
		<property name="repeatInterval" value="864000000" />
	</bean>
 
	<!-- 시스템 로그 요약 스케줄러 -->
	<bean id="sysLogScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="sysLogTrigger" />
			</list>
		</property>
	</bean>
 
    <!-- 서버가동후 1분후 시점을 기준으로 일단위로 egovSysLogScheduling서비스의 sysLogSummary()를 실행  -->

context-syslogaop.xml의 aop를 사용한 로그 기록 설정(내부업무 템플릿 해당)

	<!--  System Log Aspect -->
	<bean id="logManage" class="egovframework.let.sym.log.clg.service.EgovLoginLogAspect" />
 
	<aop:config>
		<aop:aspect id="logManageAspect" ref="logManage">
		  <!--  로그인 Method -->
	      <aop:before pointcut="execution(public * egovframework.let.uat.uia.service.EgovLoginService.actionLogin(..))" method="logLogin" />
	      <!--  로그아웃 Method
	      <aop:before pointcut="execution(public * egovframework.let.uat.uia.web.EgovLoginController.actionLogout(..))" method="logLogout" />
	       -->
		</aop:aspect>
	</aop:config>
 
    <!-- 로그인 관련 서비스 클래스 내에서 actionLogin으로 시작하는 함수 동작 시 logManage를 통해 접속로그 등록 -->
Clone this wiki locally