0

我有一项服务可以在 mongo 中执行 CRUD 操作。我为此使用 MongoRepository。我遇到的问题是,当我插入重复条目时,我无法恢复任何错误。

@Document(collection = "test")
public class MongoInsert {

@Id
private String identifier;

private String value;

@PersistenceConstructor
public MongoInsert(String identifier, String value) {
    this.identifier = identifier;
    this.value = value;
}

}

我写了一个测试,它试图两次插入同一个对象,测试通过了,我期待第二次插入会抛出异常。

我的 mongoTemplate 定义是

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="myMongoDbFactory"/>
    <constructor-arg name="mongoConverter" ref="myMappingConverter"/>
    <property name="writeResultChecking" value="EXCEPTION"/>
</bean>

我尝试将'writeConcern'设置为'ACKNOWLEDGED',但后来我遇到了错误

引起:org.springframework.data.mongodb.UncategorizedMongoDbException: { "serverUsed" : "127.0.0.1:27017" , "ok" : 0 , "code" : 2 , "errmsg" : "cannot use non-majority 'w ' 当主机不是副本集的成员时,模式 ACKNOWLEDGED"}; 嵌套异常是 com.mongodb.CommandFailureException: { "serverUsed" : "127.0.0.1:27017" , "ok" : 0 , "code" : 2 , "errmsg" : "cannot use non-majority 'w' mode ACKNOWLEDGED when主机不是副本集的成员”}

我在这里想念什么?

4

1 回答 1

0

尝试使用而不是

<property name="writeConcern" value="ACKNOWLEDGED"/>

这个

<property name="writeConcern">
    <value type="com.mongodb.WriteConcern">ACKNOWLEDGED</value>
</property>

(详细说明:如何在 Spring 配置文件中为 bean 的属性分配 Enum 值?

于 2015-09-17T09:13:08.110 回答