Den*_*gin 4 java spring transactions spring-transactions
我正在尝试使用带注释的TX Spring支持.
应用上下文XML:
<?xml ...>
<tx:annotation-driven/>
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
...
</bean>
<bean id="repository" class="Repository">
<constructor-arg ref="dataSource"/>
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
实际代码:
public class Repository {
@Transactional
public void save(Op op) {
System.out.println("Transaction active:::: " + TransactionSynchronizationManager.isActualTransactionActive());
...
}
}
Run Code Online (Sandbox Code Playgroud)
来电代码:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/integration-context.xml"})
public class RepositoryTest {
@Autowired
private Repository repository;
@Test
public void testRepositoryPersistence() {
Op op = mock(Op.class);
repository.save(op);
}
}
Run Code Online (Sandbox Code Playgroud)
它给了FALSE.
我究竟做错了什么?
您应该在配置中添加它
<context:annotation-config/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)
在RepositoryClass上添加一个接口
public class Repository implements IRepository{
@Transactional
public void save(Op op) {
System.out.println("Transaction active:::: " + TransactionSynchronizationManager.isActualTransactionActive());
...
}
}
Run Code Online (Sandbox Code Playgroud)
这在你的测试课上
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/integration-context.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
public class RepositoryTest extends AbstractTransactionalJUnit4SpringContextTests{
@Autowired
private IRepository repository;
@Test
public void testRepositoryPersistence() {
Op op = mock(Op.class);
repository.save(op);
}
}
Run Code Online (Sandbox Code Playgroud)
看本教程.
| 归档时间: |
|
| 查看次数: |
5476 次 |
| 最近记录: |