2022.09.25 - [프레임워크/스프링] - [Spring] Spring MVC - 세팅 파일 예시 및 설명
여기서는 기본적인 정보를 정리함 이글을 보면서 참고 하시면 더욱 이해가 쉬움
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">
스프링에서 지원하는 메세지 처리하기 입니다.
이것도 결국 일일이 수정하기 귀찮아서 공통적인 메세지들을 모아두어서 사용하기 위한 방법입니다.
'프레임워크 > 스프링' 카테고리의 다른 글
[SpringBoot] 라이브러리 관리 (0) | 2023.03.11 |
---|---|
[Spring] AOP 프록시와 내부 호출 문제 해결 방안 3가지 (0) | 2023.01.22 |
Spring @Aspect 범위 애노테이션으로 적용하기 (0) | 2023.01.06 |
@RequestParam vs @PathVariable (0) | 2022.12.29 |
Spring @Aspect를 사용하여 어드바이저 생성 기능 사용 (0) | 2022.12.24 |