Mybatis를 이용하여 프로젝트 진행 시 아래와 같은 Exception이 발생하는 경우가 있습니다.
java.sql.SQLException: 허용되지 않은 작업
이 경우는 sqlSession 객체가 배치타입으로 설정되어 있어서 프로시저를 호출 할 수 없는 경우입니다.
mybatis의 배치 관련 설정하는 곳은 대표적으로 두군대를 볼 수 있습니다.
각 설정 파일은 환경에 따라 파일명이 상이 할 수 있으므로 아래와 같이 설명하도록 하겠습니다.
1. 스프링 설정 xml
<bean id="sqlBatchSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index="1" value="BATCH" /> </bean> |
붉은색 항목이 존재할 경우 모든 DB관련 작업은 배치 형태로 수행하게 됩니다. (ibatis의 executeBatch 와 동일)
해당 부분을 삭제 하면 정상적으로 프로시저 호출이 가능합니다.
2. mybatis 설정 xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:/mybatis/mybatisConfig.xml" /> <property name="mapperLocations" value="classpath:/mybatis/sql/**/*.xml" /> </bean> |
붉은색 부분에 설정한 Mybatis 설정파일의 내용을 확인해 볼 필요가 있습니다.
<?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="jdbcTypeForNull" value="VARCHAR"/> <setting name="defaultExecutorType" value="BATCH"/>
</settings> <!-- Type aliases --> <typeAliases /> <!-- Mappers --> <mappers />
</configuration> |
붉은색으로 표시된 설정항목이 존재할 경우 스프링 설정.xml에서 <constructor-arg index="1" value="BATCH" /> 가 없더라도 배치형태로 수행 하게 됩니다.
sqlSession 객체를 일반 형태와 배치형태로 두개의 빈을 등록해 사용하길 권장드립니다.
당연히 배치관련 옵션은 스프링설정.xml에서 배치형태로 설정하시고 Mybatis설정 파일에서는 해당 설정값을 제거 하시고 사용하시는걸 추천드립니다.
스프링설정.xml에서 관리하는 내용의 예제 소스
<bean id="oracleTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:/mybatis/mybatisConfig.xml" /> <property name="mapperLocations" value="classpath:/mybatis/sql/**/*.xml" /> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="sqlBatchSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index="1" value="BATCH" /> </bean> |
'Development > Java' 카테고리의 다른 글
[Spring 3.2] Servlet Xml 참고용 (0) | 2018.02.09 |
---|---|
[Mybatis] selectkey 사용시 key 값을 가져오지 못하는 경우 (0) | 2017.05.23 |
[Mybatis] java.lang.NumberFormatException 발생 (0) | 2017.04.20 |
[Quartz] 1.x.x 사용하다 2.x.x로 변경 시 변경된 메서드 (0) | 2017.03.16 |
Spring Framework 3.2 + Spring-security 3.2 구성하기 (0) | 2016.12.21 |