Spring 3.0.5 + Spring MVC(WEB) 3.0.5 + MyBatis 3.0.4 + ehcache2.4.2 + tiles2.2.2 + log4j 1.2.13
iBatis에서 MyBatis로 바뀌면서 xml dtd도 바뀌고 실행 메소드도 바뀌고 참 머리가 아프다.
거기에 ehcache 사용으로 인해서 MyBatis와 Logging 문제로 하루종일 셋팅하고 참 진짜 너무 어렵다.
각 설정했던 상황은 다음과 같다.
/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>MOA IT PROJECT</display-name>
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>codelabor-spring-mvc-template.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>10000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<servlet>
<servlet-name>cms</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cms</servlet-name>
<url-pattern>*.cms</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
/WEB-INF/applicationContext.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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 데이터소스 생성 -->
<bean id="dsCMS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="{URL}" />
<property name="username" value="{ID}" />
<property name="password" value="{PW}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="3" />
<property name="maxWait" value="10000" />
<property name="defaultAutoCommit" value="false" />
<property name="validationQuery" value="select 1 from dual" />
</bean>
<!-- MyBatis Session -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
<property name="configLocation" value="/WEB-INF/config/mybatis-config.xml" />
<property name="mapperLocations" value="/WEB-INF/config/mapper/*.xml" />
<property name="dataSource" ref="dsCMS" />
<property name="transactionFactory">
<bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</property>
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
<!-- 트랜젝션 메니져 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dsCMS" />
</bean>
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager" />
</bean>
<!-- Tiles 2 -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/tiles-def.xml</value>
</list>
</property>
</bean>
<!-- EHCache -->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" scope="singleton">
<property name="configLocation" value="/WEB-INF/ehcache.xml" />
</bean>
<bean id="cmsCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager" ref="cacheManager" />
</bean>
<!-- DAO SESSTING -->
<bean id="testDAO" class="TestDAO">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>
/WEB-INF/cms-servlet.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="order" value="1" />
<property name="alwaysUseFullPath" value="true" />
<property name="mappings">
<props>
<prop key="/test.cms">testController</prop>
<prop key="/moa.cms">testController</prop>
</props>
</property>
</bean>
<!-- TESET Controller -->
<bean id="testController" class="TestController" p:methodNameResolver-ref="parameterMethodNameResolver">
<property name="testDAO" ref="testDAO"></property>
</bean>
<!-- 파라미터별 리졸뷰 -->
<bean id="parameterMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName" value="command" />
<property name="defaultMethodName" value="list"></property>
</bean>
<!-- URL Mapper -->
<bean id="handlerMapping1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="yes" />
</bean>
<!-- Resolvers -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
<property name="order" value="1"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="order" value="2"/>
</bean>
</beans>
/WEB-INF/config/mybatis-config.xml
<?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>
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="useGeneratedKeys" value="true" />
<setting name="defaultExecutorType" value="REUSE" />
</settings>
<typeAliases>
<typeAlias alias="hashMap" type="java.util.HashMap" />
<typeAlias alias="map" type="java.util.Map" />
</typeAliases>
</configuration>
/WEB-INF/config/mapper/user.xml
<?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="user">
<cache type="org.mybatis.caches.ehcache.EhcacheCache" />
<cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
<resultMap type="hashMap" id="userHashMap">
<result property="contents" column="contents" jdbcType="CLOB" javaType="java.lang.String" />
</resultMap>
<select id="selectTest" useCache="true" parameterType="hashMap" resultMap="userHashMap">
<![CDATA[
SELECT A.BOARDNO, A.SUBJECT, A.WRITER, A.PASSWORD, A.HIT_CNT, A.MEMO_CNT, A.FILE_CNT, A.SUBMENU_YN, A.NOTICE_YN, A.DELETE_YN, A.REGISTY_DT,
A.MODIFY_DT, A.BOARDID, A.WRITERIP, A.THUMBNAIL, A.FILES, A.DEPTNAME, A.TELEPHONE, A.EMAIL, A.SECURITY_YN, A.BOARDCATEGORYID
FROM TB_BOARD A
]]>
</select>
</mapper>
/WEB-INF/tiles/tiles-defs.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="indexLayout" template="/WEB-INF/jsp/layout/index/layout.jsp">
<put-attribute name="title">레이아웃페이지</put-attribute>
<put-attribute name="header" value="/WEB-INF/jsp/layout/index/header.jsp" />
<put-attribute name="menu" value="/WEB-INF/jsp/layout/index/menu.jsp" />
<put-attribute name="body" value="/WEB-INF/jsp/layout/index/body.jsp" />
<put-attribute name="footer" value="/WEB-INF/jsp/layout/index/footer.jsp" />
</definition>
</tiles-definitions>
/WEB-INF/ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir" />
<cache name="com.whatever.SOMECACHE" maxElementsInMemory="2000"
eternal="false" timeToLiveSeconds="86400" overflowToDisk="false"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
/WEB-INF/log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="debug" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
</layout>
</appender>
<appender name="info" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
</layout>
</appender>
<appender name="log-file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="test-daily.log"/>
<param name="Append" value="true"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
</layout>
</appender>
<category name="java.sql.Connection">
<priority value="debug" />
</category>
<category name="java.sql.PreparedStatement">
<priority value="debug" />
</category>
<category name="java.sql.ResultSet">
<priority value="debug" />
</category>
<category name="java.sql.Statement">
<priority value="debug" />
</category>
<category name="org.apache.ibatis">
<priority value="debug" />
</category>
<category name="org.springframework.web.servlet.DispatcherServlet">
<priority value="error" />
</category>
<root>
<level value="debug"/>
<appender-ref ref="debug"/>
</root>
</log4j:configuration>