스케줄러 문의
- 작성자 :
- 아*
- 작성일 :
- 2024-01-24 15:21:21
- 조회수 :
- 803
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
Annotation 설정을 이용한 선언적 트랜잭션을 사용하고 있으며 강제적 예외 처리 테스트를 할 경우
컨트롤러를 통해 서비스 호출 시 트랜잭션 처리가 정상적으로 되나
스케줄러에서 서비스 호출 시 No transaction aspect-managed TransactionStatus in scope 이라고 나오며 트랜잭션 처리가 안됩니다.
설정은 아래처럼 했으며 해결방법을 찾고 싶습니다.
* context scheduler.xml
<beans>
<context:component-scan base-package="cmm.scheduler" />
<task:scheduler id="jobScheduler" pool-size="10" />
<task:annotation-driven scheduler="jobScheduler" />
<bean id="adminService" class="service.impl.AdminServiceImpl" />
</beans>
* servlet-context.xml
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
* Scheduler.java
Scheduled(cron 0 19 17 * * *)
public void insertScheduled() {
adminService.insertValue1()
}
* AdminService.java
public interface insertValue1 {
* AdminServiceImpl.java
@Transactional
@Override
public class insertValue1 {
컨트롤러를 통해 서비스 호출 시 트랜잭션 처리가 정상적으로 되나
스케줄러에서 서비스 호출 시 No transaction aspect-managed TransactionStatus in scope 이라고 나오며 트랜잭션 처리가 안됩니다.
설정은 아래처럼 했으며 해결방법을 찾고 싶습니다.
* context scheduler.xml
<beans>
<context:component-scan base-package="cmm.scheduler" />
<task:scheduler id="jobScheduler" pool-size="10" />
<task:annotation-driven scheduler="jobScheduler" />
<bean id="adminService" class="service.impl.AdminServiceImpl" />
</beans>
* servlet-context.xml
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
* Scheduler.java
Scheduled(cron 0 19 17 * * *)
public void insertScheduled() {
adminService.insertValue1()
}
* AdminService.java
public interface insertValue1 {
* AdminServiceImpl.java
@Transactional
@Override
public class insertValue1 {
환경정보
-
- OS 정보 : 리눅스
- 표준프레임워크 버전 : 4.1
- JDK(JRE) 정보 : 1.8
- WAS 정보 : 톰켓
- DB 정보 : mysql
- 기타 환경 정보 :
A
안녕하세요.
표준프레임워크 센터입니다.
스프링 트랜잭션은 unchecked exceptions의 경우만 롤백시키고 checked exception가 발생하면 커밋시키게 되므로
Annotation 설정을 이용한 선언적 트랜잭션을 사용하더라도
throw new Exception(); 을 통하여 강제적으로 예외를 발생시키게 될 경우 커밋이 이루어집니다.
checked exception에 대해서도 롤백을 지정하려면 rollbackFor 속성에 명시적으로 선언이 필요하므로
해당 부분을 재확인하여 테스트를 진행하시기 바랍니다.
감사합니다.
표준프레임워크 센터입니다.
스프링 트랜잭션은 unchecked exceptions의 경우만 롤백시키고 checked exception가 발생하면 커밋시키게 되므로
Annotation 설정을 이용한 선언적 트랜잭션을 사용하더라도
throw new Exception(); 을 통하여 강제적으로 예외를 발생시키게 될 경우 커밋이 이루어집니다.
checked exception에 대해서도 롤백을 지정하려면 rollbackFor 속성에 명시적으로 선언이 필요하므로
해당 부분을 재확인하여 테스트를 진행하시기 바랍니다.
감사합니다.