Spring Data Mongotemplate不会抛出DataAccessException
-
11-12-2019 - |
题
我正在尝试学习mongodb,同时使用spring框架编写一个简单的休息申请。
我有一个简单的模型:
@Document
public class Permission extends documentBase{
@Indexed(unique = true)
private String name;
public Permission(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
.
然后我有一个简单的dao:
@Repository
@Transactional
@Profile({"production","repositoryTest","mongoIntegrationTest"})
public class DaoImpl implements DAO {
@Autowired
protected MongoTemplate mongoTemplate;
public <T> T addObject(T object) {
mongoTemplate.insert(object);
return object;
}
.
我有我的集成测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:mvc-dispatcher-servlet.xml", classpath:IntegrationContext.xml"},loader = TestXmlContextLoader.class)
@ActiveProfiles("mongoIntegrationTest")
public class RepositoryIntegrationTest extends AccountTestBase{
@Autowired DAO repository;
@Autowired WebApplicationContext wac;
@Test
public void AddPermission() {
Permission permission_1 = new Permission("test");
Permission permission_2 = new Permission("test");
repository.addObject(permission_1);
repository.addObject(permission_2);
}
}
.
我的配置:
<!-- MongoDB host -->
<mongo:mongo host="${mongo.host.name}" port="${mongo.host.port}"/>
<!-- Template for performing MongoDB operations -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"
c:mongo-ref="mongo" c:databaseName="${mongo.db.name}"/>
.
我期待,在添加“permission_2”时,他们将是一个异常从MongoDB抛出的例外,它将被春天翻译,并且在DAO中捕获作为DataAccessException。
从mongodb看日志文件我可以看到抛出重复的异常,但它永远不会到达我的DAO。
所以,我想我做错了什么,但目前,我对自己的误片盲目。
// lg
解决方案
确保将WriteConcern
的MongoTemplate
配置为非默认(例如WriteConcern.SAFE
)。默认情况下,MongoDB在Fire-And-Forget模式下,通常不会丢失索引违规或服务器错误的异常。
其他提示
仍然努力解决这个问题。 芬良地,我成功地获得了exeption翻译工作。mongodb抛出一个例外,它被翻译成Spring数据例外。
现在我遇到了另一个问题。
我的DAO也如上所述,还有以下代码:
@ExceptionHandler(DataAccessException.class)
public void handleDataAccessException(DataAccessException ex) {
// For debug only
DataAccessException test = ex;
test.printStackTrace();
}
.
我期待这个代码捕获异常,但这不是这种情况。
为什么不呢?
// lasse
不隶属于 StackOverflow