java - MongoDb错误: cannot use 'j' option when a host does not have journaling enabled

标签 java mongodb

我在开发中使用 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错误: cannot use 'j' option when a host does not have journaling enabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27591685/

相关文章:

java - 无法将数据从 AppCompatDialogFragment 传递到 Fragment (NullPointerException)

command-line - 在 MongoDB 控制台中重复最后一个命令?

node.js - 使用nodejs更新mongodb中的数据时出错

MongoDB 选举内部

java - 为什么 ActionListener 上的一些代码被跳过?

java - 我正在写一个密码,但只有当我忽略空格时它才会起作用。有没有办法让它忽略空格?

java - 未使用 Play 应用任何样式! 2.0 PDF模块

java - 行为 |正则表达式中的符号

javascript - 在 mongodb 更新中使用变量

c# - MongoDB C# 驱动程序 IAsyncCursor<BsonDocument> 行为?