我在开发中使用 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/