K.N*_*Nam 5 spring h2 spring-transactions spring-data
我正在使用 SpringFramework 进行事务测试。我有以下课程。
用户服务类
@Transactional
public interface UserService {
void add(User user);
@Transactional(readOnly = true)
User get(String id);
@Transactional(readOnly = true)
List<User> getAll();
void deleteAll();
void update(User user);
}
Run Code Online (Sandbox Code Playgroud)
UserServiceImpl.class
public class UserServiceImpl implements UserService {
// skip some methods
@Override public void update(User user) { userDao.update(user); }
}
Run Code Online (Sandbox Code Playgroud)
测试用户服务类
public class TestUserService extends UserServiceImpl {
@Override
public List<User> getAll() {
for (User user : super.getAll()) {
// try to update in get* method. it's read-only.
super.update(user);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
测试代码
@Test(expected = TransientDataAccessResourceException.class)
public void readOnlyTransactionAttribute() {
testUserService.getAll();
}
Run Code Online (Sandbox Code Playgroud)
此测试代码是使用 mysql 时的成功案例。但是在使用 H2 内存数据库时会失败。这是因为事务无一例外地完成了。
我阅读了 Spring Framework 文档并发现了以下内容:http : //docs.spring.io/spring/docs/4.3.x/javadoc-api/org/springframework/transaction/annotation/Transactional.html#readOnly--
这只是对实际事务子系统的提示;它不一定会导致写访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会抛出异常,而是默默地忽略该提示。
但是我想知道有没有办法用H2数据库通过这个测试。
| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |