[Java]스프링 트랜잭션 Working Code
pom.xml
에 추가.
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
applicationContext.xml에 추가해준다.
<tx:annotation-driven transaction-manager="txManager" />
<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="get*" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut id="serviceOperation"
expression="execution(public * kr.test.service.impl.*Impl.*(..))" />
<aop:advisor id="transactionAdvisor" pointcut-ref="serviceOperation"
advice-ref="txAdvice" />
</aop:config>
servlet-context.xml 에서는
<!-- Controller가 들어있는 package. -->
<context:component-scan base-package="kr.test.controller"/>
Class단에서
Service의 impl에는
package kr.test.service.impl;
@Service
public class TestServiceImpl implements TestService {
...
@Override
public int insertHpTest(HpTestVO vo) throws Exception {
int result = 0;
try {
long time = System.currentTimeMillis();
SimpleDateFormat dayTime = new SimpleDateFormat("yyyyMMddHHmmss");
logger.info("1");
logger.info("2");
vo.setTest_title("처음들어가는 값 = " + dayTime.format(new Date(time)));
managerDao.insertHpTest(vo);
// 30개 이상의 글자가 들어가면 오류..
vo.setTest_title(
"0123456789 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");
managerDao.insertHpTest(vo);
logger.info("3");
logger.info("4");
} catch (Exception e) {
logger.info("a");
logger.info("b");
throw new Exception();
}
return result;
}