-
Notifications
You must be signed in to change notification settings - Fork 19
context *.xml 주요 설정
eGovFrameSupport edited this page Apr 6, 2023
·
1 revision
- 추가 설정 파일들은 템플릿 프로젝트 소스의 각 resource/egovframework/spring/com/폴더 아래에 위치한다.
- anontation, aop, schedule, validation, security, id-generation, mapper, transaction 관련 설정정보가 등록된다.(템플릿 종류별로 차이 있음)
<!-- 내부업무의 기능 작동과정에서 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());
}
...
-->
<!-- 환경설정 기본정보를 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>
<!-- 시스템에서 업무 별로 레코드 신규발생 시 일련번호를 생성하는 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();
...
-->
<!-- 프로퍼티 정보 설정 -->
<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");
...
-->
<!-- 소스 내 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 {
...
<!-- 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 함수들의 처리결과가 모두 롤백됨) -->
<!-- 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>
...
-->
- 실행환경의 시큐리티 간소화 부분을 참고하세요.
<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);
...
-->
<!-- 시스템 로그 요약 -->
<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()를 실행 -->
<!-- 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를 통해 접속로그 등록 -->