Java MongoDb错误:无法使用';j';主机未启用日志记录时的选项

Java MongoDb错误:无法使用';j';主机未启用日志记录时的选项,java,mongodb,Java,Mongodb,我在dev中使用mongo还不错,当将应用程序部署到testenv中时,在应用程序中保存对象时出现了这个错误 cannot use 'j' option when a host does not have journaling enabled Dispatcher servlet对于两个应用程序(开发与测试)都是相同的,日志是安全的 我做错了什么 <mongo:mongo host="127.0.0.1" port="27017" write-concern="JOURNAL_S

我在dev中使用mongo还不错,当将应用程序部署到testenv中时,在应用程序中保存对象时出现了这个错误

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

Dispatcher 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>

这是2.6中的一个变化。MongoDB服务器现在要求启用日志记录,以使用需要日志记录的写关注点。在2.4和之前,服务器将自动忽略日志要求,因为服务器上未启用日志记录

测试MongoDB群集必须禁用日志记录。在服务器上启用日志记录或删除客户端上的默认写入关注点(例如,删除/更改写入关注点=“JOURNAL\u SAFE”)。对于生产,您几乎肯定希望启用日志记录

如果您使用的副本集(或副本集的共享集群)至少有3个数据持有成员,那么“多数”的写关注点可能是更好、更高性能的选择。(例如,书面关注=“多数”)

如果您运行的单个Mongod进程不是副本集的一部分,那么您可能需要日志写入问题,但需要确保未在服务器上禁用日志。如果无法控制服务器(并且仍在使用单个mongod进程),则可能需要切换到FSYNC写入问题。使用FSYNC,如果服务器启用了日志记录,那么它将充当日志写入,对于未启用日志记录的服务器,它将强制所有数据文件到磁盘(这将导致大量延迟)。已经说过,最好在服务器上启用日志记录


Rob.

这是2.6版的一个变化。MongoDB服务器现在要求启用日志记录,以使用需要日志记录的写关注点。在2.4和之前,服务器将自动忽略日志要求,因为服务器上未启用日志记录

测试MongoDB群集必须禁用日志记录。在服务器上启用日志记录或删除客户端上的默认写入关注点(例如,删除/更改写入关注点=“JOURNAL\u SAFE”)。对于生产,您几乎肯定希望启用日志记录

如果您使用的副本集(或副本集的共享集群)至少有3个数据持有成员,那么“多数”的写关注点可能是更好、更高性能的选择。(例如,书面关注=“多数”)

如果您运行的单个Mongod进程不是副本集的一部分,那么您可能需要日志写入问题,但需要确保未在服务器上禁用日志。如果无法控制服务器(并且仍在使用单个mongod进程),则可能需要切换到FSYNC写入问题。使用FSYNC,如果服务器启用了日志记录,那么它将充当日志写入,对于未启用日志记录的服务器,它将强制所有数据文件到磁盘(这将导致大量延迟)。已经说过,最好在服务器上启用日志记录


Rob.

这种行为有一个原因:如果代码(又名业务逻辑)要求记录操作,最好知道不能满足此要求。这种行为有一个原因:如果代码(又名业务逻辑)要求记录操作,知道这一要求无法满足是件好事。因此,对于prod中的mongodb的单个实例,这种写入问题应该是什么?@user648026:这在很大程度上取决于您的数据和需求。对于“廉价”数据,如clickstreams和缓存数据等,您通常可以使用“未确认”之类的内容。如果数据更有价值,你至少要把它记在日记本上。如果您想确保即使一个节点发生故障,数据仍然是持久的,那么您应该有一个
w:maist
w:2
的写关注点。如果您有一个包含辅助项的读取首选项,并且需要绝对肯定地确保在写入返回后,所有节点上的所有读取都返回相同的值,那么您可以设置
w:all
。因此,对于prod中mongodb的单个实例,这种写入问题应该是什么?@user648026:这在很大程度上取决于您的数据和需求。对于“廉价”数据,如clickstreams和缓存数据等,您通常可以使用“未确认”之类的内容。如果数据更有价值,你至少要把它记在日记本上。如果您想确保即使一个节点发生故障,数据仍然是持久的,那么您应该有一个
w:maist
w:2
的写关注点。如果您有一个包含辅助项的读取首选项,并且需要绝对肯定地确保在写入返回后,所有节点上的所有读取都返回相同的值,那么您可以设置
w:all
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