본문 바로가기
프레임워크/스프링

스프링 xml 설정 정리

by so5663 2023. 1. 17.

2022.09.25 - [프레임워크/스프링] - [Spring] Spring MVC - 세팅 파일 예시 및 설명

 

[Spring] Spring MVC - 세팅 파일 예시 및 설명

스프링 세팅 파일에는 대표적으로 3개의 xml파일이 있다. 1. web.xml (세팅 파일 지정 및 기초 설정) 2. servlet-context.xml (서블릿 - 화면 이동에 관한 세팅) 3. root-context.xml(DB 정보 세팅) web.xml만 이름이

soso-shs.tistory.com

여기서는 기본적인 정보를 정리함 이글을 보면서 참고 하시면 더욱 이해가 쉬움

 

web.xml에 먼저 servlet설정을 위해 선언함

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:glabfw/spring/com/**/context-*.xml</param-value>
</context-param>

이런식으로하면 서블릿 파일을 사용용도에 따라서 가독성 좋게 분리 할수 있고 여러개를 사용할 수 있다.

 

예시 사진이다. 위치랑 이름만 맞쳐주면 스프링이 실행될때 모두다 인식이 된다.

 

여기서는 모두다 설명하지 않고 기본적인 것만 설명하겠습니다.

 

일단 먼저 저는 db연결을 할때 설정을 보겠습니다.

context-datasource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd">

    <bean id="egov.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/glabfw/jdbc.properties</value>
            </list>
        </property>
    </bean>
    
    <!-- MySQL -->
	<bean id="dataSource-mysql" class="org.apache.commons.dbcp.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}"/>
		<property name="validationQuery" value="select 1 from dual" />
		<property name="testWhileIdle" value="true" />
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
	</bean>
</beans>

<property name="locations">를 사용하여 자주 변경되는 정보를 properties 파일에 환경설정 관련값들을 미리 저장해둔 후 Spring 에서 가져와 사용하도록 하는 방법은 많이 사용된다.

주로 데이터 베이스 커넥션 정보등이나 설정값들에 많이 사용된다.

Globals.DriverClassName=org.postgresql.Driver properties 파일에 저장한 후에

${Globals.DriverClassName}로 사용

 

 

이번에는 마이바티스 설정을 담당하는 부분을 하겠습니다.

context-mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd			
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    <bean id="egov.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/glabfw/jdbc.properties</value>
            </list>
        </property>
    </bean>
    
	<!-- SqlSession setup for MyBatis Database Layer -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="egov.dataSource" />
		<property name="configLocation" value="classpath:/cms/sqlmap/config/sql-mapper-config.xml" />
        
		<!-- <property name="mapperLocations" value="classpath:/cms/sqlmap/**/*_SQL.xml" /> -->
		<property name="mapperLocations">
		    <list>    
		    	<value>classpath:/cms/sqlmap/${Globals.DbType}/*_SQL.xml</value>    
		    	<value>classpath:/cms/sqlmap/${Globals.DbType}/**/*_SQL.xml</value>    
		    </list>
	    </property>
	</bean>
</beans>

<property name="mapperLocations">를 사용하여 매퍼의 위치를 찾을수 있도록 함

 

<property name="configLocation" value="classpath:/cms/sqlmap/config/sql-mapper-config.xml" />

sql-mapper-config 설정 파일

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    
   <properties resource="glabfw/jdbc.properties"></properties>
	<settings>
		<!--
			cacheEnabled : 설정에서 각 mapper 에 설정된 캐시를 전역적으로 사용할지 말지에 대한 여부 (true | false , default : TRUE)
			lazyLoadingEnabled : 늦은 로딩을 사용할지에 대한 여부. 사용하지 않는다면 모두 즉시 로딩할 것이다. 이 값은 fetchType 속성을 사용해서 대체할 수 있다. (true | false , default : FALSE)
			aggressiveLazyLoading : 활성화 상태로 두게 되면 늦은(lazy) 로딩 프로퍼티를 가진 객체는 호출에 따라 로드될 것이다. 반면에 개별 프로퍼티는 요청할때 로드된다. (true | false , default : TRUE)
			multipleResultSetsEnabled : 한개의 구문에서 여러개의 ResultSet 을 허용할지의 여부(드라이버가 해당 기능을 지원해야 함) (true | false , default : TRUE)
			useColumnLabel : 칼럼명 대신에 칼럼라벨을 사용. 드라이버마다 조금 다르게 작동한다. 문서와 간단한 테스트를 통해 실제 기대하는 것처럼 작동하는지 확인해야 한다. (true | false , default : TRUE)
			useGeneratedKeys : 생성키에 대한 JDBC 지원을 허용. 지원하는 드라이버가 필요하다. true 로 설정하면 생성키를 강제로 생성한다. 일부 드라이버(예를들면, Derby)에서는 이 설정을 무시한다. (true | false , default : FALSE)
			autoMappingBehavior : MyBatis 가 칼럼을 필드/프로퍼티에 자동으로 매핑할지와 방법에 대해 명시. PARTIAL 은 간단한 자동매핑만 할뿐, 내포된 결과에 대해서는 처리하지 않는다. FULL 은 처리가능한 모든 자동매핑을 처리한다. (NONE, PARTIAL, FULL , default : PARTIAL)
			defaultExecutorType : 디폴트 실행자(executor) 설정. SIMPLE 실행자는 특별히 하는 것이 없다. REUSE 실행자는 PreparedStatement 를 재사용한다. BATCH 실행자는 구문을 재사용하고 수정을 배치처리한다. (SIMPLE REUSE BATCH , default : SIMPLE)
			defaultStatementTimeout : 데이터베이스로의 응답을 얼마나 오래 기다릴지를 판단하는 타임아웃을 셋팅 (양수 , default : 셋팅되지 않음(null))
			safeRowBoundsEnabled : 중첩구문내 RowBound 사용을 허용 (true | false , default : FALSE)
			mapUnderscoreToCamelCase : 전통적인 데이터베이스 칼럼명 형태인 A_COLUMN을 CamelCase형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 (true | false , default : FALSE)
			localCacheScope : 마이바티스는 순환참조를 막거나 반복된 쿼리의 속도를 높히기 위해 로컬캐시를 사용한다. 디폴트 설정인 SESSION을 사용해서 동일 세션의 모든 쿼리를 캐시한다. localCacheScope=STATEMENT 로 설정하면 로컬 세션은 구문 실행할때만 사용하고 같은 SqlSession에서 두개의 다른 호출사이에는 데이터를 공유하지 않는다. (SESSION | STATEMENT , default : SESSION)
			jdbcTypeForNull : JDBC타입을 파라미터에 제공하지 않을때 null값을 처리한 JDBC타입을 명시한다. 일부 드라이버는 칼럼의 JDBC타입을 정의하도록 요구하지만 대부분은 NULL, VARCHAR 나 OTHER 처럼 일반적인 값을 사용해서 동작한다. (JdbcType 이늄. 대부분은 NULL, VARCHAR 나 OTHER 를 공통적으로 사용한다. , default : OTHER)
			lazyLoadTriggerMethods : 늦은 로딩을 야기하는 객체의 메소드를 명시 (메소드 이름을 나열하고 여러개일 경우 콤마(,) 로 구분 , default : equals,clone,hashCode,toString)
			defaultScriptingLanguage : 동적으로 SQL을 만들기 위해 기본적으로 사용하는 언어를 명시 (타입별칭이나 패키지 경로를 포함한 클래스명 , default : org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver)
			callSettersOnNulls : 가져온 값이 null일때 setter나 맵의 put 메소드를 호출할지를 명시 Map.keySet() 이나 null값을 초기화할때 유용하다. int, boolean 등과 같은 원시타입은 null을 셋팅할 수 없다는 점은 알아두면 좋다. (true | false , default : FALSE)
			logPrefix : 마이바티스가 로거(logger) 이름에 추가할 접두사 문자열을 명시 (문자열 , default : 셋팅하지 않음)
			logImpl : 마이바티스가 사용할 로깅 구현체를 명시 이 설정을 사용하지 않으면 마이바티스가 사용할 로깅 구현체를 자동으로 찾는다. (SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING , default : 셋팅하지 않음)
			proxyFactory : 마이바티스가 늦은 로딩을 처리할 객체를 생성할 때 사용할 프록시 툴을 명시 (CGLIB | JAVASSIST , default : CGLIB)
		-->
		<setting name="cacheEnabled" value="false" />
		<setting name="useGeneratedKeys" value="true" />
		<setting name="defaultExecutorType" value="REUSE" />
		<setting name="jdbcTypeForNull" value="NULL" />
	</settings>

 	<typeAliases>
	 	<typeAlias alias="hashMap" type="java.util.HashMap"/>
		<!--  Map의 Key값이 대소문자가 같이 들어가는 문제 해결을 위해 CaseInsensitiveMap 사용  -->
		<typeAlias alias="caseMap" 			type="org.apache.commons.collections.map.CaseInsensitiveMap"/>
		<typeAlias alias="gMap" 			type="glabfw.dao.GMap" />
		<typeAlias alias="codeMasterVo" 	type="glabfw.lib.code.CodeMasterVO" />
		<typeAlias alias="codeDetailVo" 	type="glabfw.lib.code.CodeDetailVO" />
		<typeAlias alias="fileUploadModel" 	type="glabfw.lib.fileupload.FileUploadModel" />
	</typeAliases>
	
</configuration>

 

context-common.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <context:component-scan base-package="cms,glabfw,egovframework">
       	<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

	<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>classpath:/egovframework/message/com/message-common</value>
				<value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
				<value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
				<value>classpath:/egovframework/egovProps/globals</value>
			</list>
		</property>
		<property name="cacheSeconds">
			<value>180</value>
		</property>
	</bean>
	
	<bean id="egovMessageSource" class="egovframework.com.cmm.EgovMessageSource">
        <property name="reloadableResourceBundleMessageSource">
            <ref bean="messageSource" />
        </property>
    </bean>
	 
</beans>

<context:component-scan base-package="cms,glabfw,egovframework">

  • 패키지명 이후의 하위 패키지를 검색해 @Component 어노테이션을 포함하는 모든 클래스를 Bean으로 자동 등록해 줍니다.

<context:include-filter> & <context:exclude-filter>

  • <context:include-filter>태그와 <context:exclude-filter>태그를 같이 사용하면 자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시할 수 있습니다.

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

스프링에서 지원하는 메세지 처리하기 입니다.

이것도 결국 일일이 수정하기 귀찮아서 공통적인 메세지들을 모아두어서 사용하기 위한 방법입니다.