如何使用XML中的spring-data-mongodb启用mongo连接池监视?

时间:2018-07-06 23:01:00

标签: mongodb spring-data-mongodb

我在mongo 3.6.4中使用spring-data-mongodb 1.10.12。我最近从较低版本的mongo进行了升级,现在由于没有注册ConnectionPoolStatisticsMBean,我的mongo连接池监视已损坏。根据该版本mongo的documentation,“默认情况下,JMX连接池监视处于禁用状态。要启用该功能,请通过MongoClientOptions添加com.mongodb.management.JMXConnectionPoolListener实例”

但是,在spring-data-mongo的xml模式中,除非我缺少某些内容,否则clientOptionsType不允许设置该值。使用spring-data-mongodb,有什么方法可以通过xml打开连接池监视吗?

这是我的mongo bean的xml

<mongo:mongo-client id="mongo"
                    host="${mongo.hostname:#{null}}"
                    replica-set="${mongo.replica.set:#{null}}"
                    port="${mongo.port}"
                    credentials="'${mongo.username}:${mongo.password}@${mongo.auth.db.name}?uri.authMechanism=${mongo.auth.mechanism:SCRAM-SHA-1}'"
>
    <mongo:client-options connections-per-host="${mongo.connections-per-host:40}"
                          threads-allowed-to-block-for-connection-multiplier="${mongo.threads-blocked-per-connection:3}"
                          connect-timeout="${mongo.connection-timeout:10000}"
                          max-wait-time="${mongo.maxWaitTime:120000}"
                          socket-keep-alive="${mongo.socketKeepAlive:true}"
                          socket-timeout="${mongo.socketTimeout:0}"
                          read-preference="${mongo.read.preference:PRIMARY_PREFERRED}"
                          write-concern="${mongo.write.concern:ACKNOWLEDGED}"
    />
</mongo:mongo-client>

和我的pom依赖项

<properties>
    <mongo-version>3.6.4</mongo-version>
    <spring-data-version>1.10.12.RELEASE</spring-data-version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>${mongo-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>${spring-data-version}</version>
    </dependency>
</dependencies>

3 个答案:

答案 0 :(得分:1)

的确,没有办法通过spring-data-mongodb模式添加连接池侦听器,但是维护该存储库的人提出了一种解决方案,即使用BeanPostProcessor来更改MongoClientOptions。像这样传递给mongo客户

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

    if (bean instanceof MongoClientOptions) {
        return MongoClientOptions.builder((MongoClientOptions) bean)
            .addConnectionPoolListener(new JMXConnectionPoolListener()).build();
    }
    return bean;
}

这样做为我成功注册了ConnectionPoolStatisticsMBeans

答案 1 :(得分:1)

我解决了同样的挑战。就我而言,最初的Spring配置是使用XML完成的。我设法将XML配置与Java配置结合在一起,因为 Java配置使您可以更加灵活地配置NSMutableData

MongoClientOptions

希望这可以帮助某人...

答案 2 :(得分:0)

在我的项目中,添加BeanPostProcessor是没有用的,因为MongoClientOptions Bean不会自动实例化。 我必须手动创建Bean才能在我的环境中添加连接池侦听器:

@Bean public MongoClientOptions myMongoClientOptions() {
      return MongoClientOptions.builder().addConnectionPoolListener(new JMXConnectionPoolListener()).build();
}