2014-11-03 21 views
2

我有Mongo注入到春天。 一切正常。但是,当我试图用坚持线程太多的数据,我有这样的错误:如何配置Mongo max线程?

nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Too many threads are already waiting for a connection. Max number of threads (maxWaitQueueSize) of 50 has been exceeded.; nested exception is com.mongodb.MongoWaitQueueFullException: Too many threads are already waiting for a connection. Max number of threads (maxWaitQueueSize) of 50 has been exceeded.] with root cause 
com.mongodb.MongoWaitQueueFullException: Too many threads are already waiting for a connection. Max number of threads (maxWaitQueueSize) of 50 has been exceeded. 
    at com.mongodb.PooledConnectionProvider.get(PooledConnectionProvider.java:70) 

我在哪里可以增加此设置?

我只有这个配置:

<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"> 
    <property name="host" value="X.X.X.X" /> 
    <property name="port" value="27017"></property> 
</bean> 

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
    <constructor-arg name="mongo" ref="mongo" /> 
    <constructor-arg name="databaseName" value="test" /> 
</bean> 

和我的日志服务在Spring:

@Service 
@Transactional 
public class LogService { 

    @Autowired 
    MongoOperations mongoOperations; 

    public void saveTransactionLog(Log l) { 
     mongoOperations.save(l); 
    } 
} 
+0

的http:// stackoverflow.com/a/38930489/3380878 – Mojtabye 2016-08-13 07:47:21

回答

1
<bean id="mongo" class="com.mongodb.Mongo"> 
     <constructor-arg name="addr" ref="address" /> 
     <constructor-arg name="options" ref="options" /> 
    </bean> 

    <bean id="options" class="com.mongodb.MongoOptions"> 
     <property name="connectionsPerHost" value="${mongo.db.pool.size}"/> 
     <property name="maxWaitTime" value="${mongo.db.pool.maxwait}"/> 
    </bean> 

    <bean id="address" class="com.mongodb.ServerAddress"> 
     <constructor-arg name="host" value="${mongo.db.host}" /> 
     <constructor-arg name="port" value="${mongo.db.port}" /> 
    </bean> 

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
     <constructor-arg ref="mongo" /> 
     <constructor-arg name="databaseName" value="${mongo.db.name}" /> 
    </bean> 
0

望着xsd,下threads-allowed-to-block-for-connection-multiplier属性,它指出

乘法器为connectionsPerHost可以阻塞的线程数量。默认值为5.如果connectionsPerHost为10,并且threadsAllowedToBlockForConnectionMultiplier为5,则50个线程可以阻塞多于此值的异常并引发异常。

所以我想你可以做这样的事情

<property name="threads-allowed-to-block-for-connection-multiplier" value="xx" /> 
+0

由org.springframework.beans.NotWritablePropertyException引发:bean类的线程允许到块连接乘法器无效 – grep 2014-11-03 16:53:03

0

add方法如何把属性名= “connectionsPerHost” 在java中配置

public Mongo mongo() throws Exception { 
    return new MongoClient("127.0.0.1",MongoClientOptions.builder() 
                 .connectionsPerHost(250) 
                 .build());