我在开发人员中使用mongo很好,将应用程序部署到测试环境中时,将对象保存在应用程序中时出现此错误

cannot use 'j' option when a host does not have journaling enabled


使用JOURNAL_SAFE的两个应用程序(开发与测试)的分派器Servlet相同
我做错了什么?

    <mongo:mongo host="127.0.0.1" port="27017" write-concern="JOURNAL_SAFE">
    <mongo:options connections-per-host="50"
               threads-allowed-to-block-for-connection-multiplier="4"
               connect-timeout="1000"
               max-wait-time="1500"
               auto-connect-retry="true"
               socket-keep-alive="true"
               socket-timeout="1500"
               slave-ok="true"
               write-number="1"
               write-timeout="0"
               write-fsync="false"/>
</mongo:mongo>


全栈跟踪:

Caused by: com.mongodb.CommandFailureException: { "serverUsed" : "127.0.0.1:27017" , "ok" : 0 , "code" : 2 , "errmsg" : "cannot use 'j' option when a host does not have journaling enabled"}
    at com.mongodb.CommandResult.getException(CommandResult.java:76)
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:131)
    at com.mongodb.DBCollectionImpl$3.execute(DBCollectionImpl.java:498)
    at com.mongodb.DBCollectionImpl$3.execute(DBCollectionImpl.java:491)
    at com.mongodb.DBTCPConnector.doOperation(DBTCPConnector.java:210)
    at com.mongodb.DBCollectionImpl.receiveWriteCommandMessage(DBCollectionImpl.java:491)
    at com.mongodb.DBCollectionImpl.writeWithCommandProtocol(DBCollectionImpl.java:430)
    at com.mongodb.DBCollectionImpl.updateWithCommandProtocol(DBCollectionImpl.java:417)
    at com.mongodb.DBCollectionImpl.update(DBCollectionImpl.java:267)
    at com.mongodb.DBCollection.update(DBCollection.java:191)
    at com.mongodb.DBCollection.update(DBCollection.java:224)
    at com.xerox.dao.MainDaoImpl.saveOrUpdatePrinter(MainDaoImpl.java:246)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155)
    ... 44 more

最佳答案

这是2.6中的更改。现在,MongoDB服务器要求启用日记功能,才能使用将日记功能作为要求的写关注。在2.4及更低版本中,服务器将静默忽略日记要求,因为未在服务器上启用日记功能。

您测试的MongoDB集群必须禁用日记功能。要么在服务器上启用日记功能,要么在客户端上消除默认的写问题(例如,删除/更改write-concern =“ JOURNAL_SAFE”)。对于生产,您几乎肯定要启用日记功能。

如果您使用的副本集(或副本集的共享群集)具有至少3个数据保存成员,则“多数”的写入关注可能是更好,性能更高的选择。 (例如,write-concern =“ MAJORITY”)。

如果您正在运行不属于副本集的单个Mongod进程,则可能需要关注日志写,但需要确保未在服务器上禁用该日志。如果您无法控制服务器(并且仍在使用单个mongod进程),则可能需要切换到FSYNC写关注。如果服务器启用了日记功能,则使用FSYNC时,它将充当日记记录,对于未启用日记功能的服务器,它将强制将所有数据文件都存储到磁盘上(这将导致大量延迟)。话虽如此,您最好在服务器上启用日记功能。

抢。

关于java - MongoDb错误:当主机未启用日记功能时,无法使用“j”选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27591685/

10-12 04:17