은 내가 MyMapper은 MyBatis로에 의해 매핑 된 서비스봄/MyBatis로 트랜잭션 롤백
@Service("myService")
class MyServiceImpl implements MyService
{
@Autowired
private MyMapper myMapper;
@Transactional(
value = "transactionManager",
propagation = Propagation.REQUIRED,
rollbackFor={Exception.class}
)
@Override
public void doStuff() {
myMapper.do1();
myMapper.do2();
throw new RuntimeException();
}
}
의 구현에 다음과 같이 MyBatis로 매퍼 Spring의 트랜잭션 관리자를 사용했습니다. 실제 코드는이 코드와 약간 다르지만 코드를 How to use @Transactional annotation in mybatis-spring?과 비슷하게 수정했습니다. 이 서비스는 컨트롤러 클래스에서 다음과 같은 방식으로 사용됩니다. 내가 수집 무엇부터
@Controller
public class MyController {
@Autowired
private MyService myService;
@GetMapping(value = {"/some/url"})
public String someMethod(){
/*
some code
*/
myService.doStuff(); // this line is not wrapped in try/catch block
/*
some code
*/
return "myjsppage";
}
}
, DO1의 DB 변경()와 DO2() 롤백해야하지만, 어떤 이유로 유지됩니다. 내가 뭘 놓치고 있니? 여기에 체크되지 않은/런타임 예외에 대한 기본 롤백으로 내 XML을 설정
<mybatis:scan base-package="com.mydomain.mapper" />
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydomain" />
<property name="username" value="uuuuuu" />
<property name="password" value="pppppp" />
</bean>
<bean id="transactionManager" 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="typeAliasesPackage" value="com.mydomain.model"/>
<property name="configLocation" value="WEB-INF/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath*:com/mydomain/mapper/*.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mydomain.mapper" />
</bean>
아니요, 여전히 동일한 방식으로 동작합니다 –
@ codemonkey_86531 스프링 컨텍스트 외부에서 이러한 두 작업간에 상호 작용하는 명시 적 쿼리가 있습니까? 또한, 어떤 DB 드라이버를 사용하고 있습니다. 이것은 내 정보만을위한 것입니다. – Rizwan
(1) 아니요, 서비스에 없습니다 (2) 평범한 오래된 MySQL JDBC –