我在 Spring MVC 3.1 项目中使用基于注释的事务,并且在引发异常时我的事务不会回滚。
这是我的服务代码
@Service
public class ImportService {
@Autowired
ImportMapper importMapper;
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
public void processImport() throws ServiceException, DatabaseException {
iImport import = new Import();
createImport(import);
throw new ServiceException("");
}
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, rollbackFor=Throwable.class)
private void createImport(Import import) throws DatabaseException {
try {
importMapper.createImport(eventImport);
} catch (Exception e) {
throw new DatabaseException(e);
}
}
因此,希望 createImport 方法在抛出异常后回滚。但不幸的是,事实并非如此。
我在服务器 context.xml 中定义我的数据源
<Resource name="datasource.import" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="user" password="password" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@INFO" />
我正在用 JNDI 查找它:
<jee:jndi-lookup id="dataSource" jndi-name="datasource.import"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven />
我使用的是 Oracle 数据库,JDBC 规范说默认情况下自动提交是真的。我认为如果我将其明确设置为 false 会有所帮助,但我不知道该怎么做。
有没有办法让回滚工作,同时通过 JNDI 查找您的 Oracle 数据源。