当前位置: 首页 > 知识库问答 >
问题:

如何用XML中的spring-data-mongoDB启用mongo连接池监控?

万俟超
2023-03-14

我正在使用spring-data-mongoDB 1.10.12和mongo 3.6.4。我最近从一个较低版本的mongo进行了升级,现在我的mongo连接池监控中断了,因为没有注册ConnectionPoolStatisticsMBean。根据mongo版本的文档,“默认情况下禁用JMX连接池监视。要启用它,请通过MongoClientOptions添加com.mongodb.management.jmxConnectionPoolListener实例”

但是,在spring-data-mongo的xml模式中,clientOptionsType不允许设置该值,除非我缺少了什么。有没有办法,使用spring数据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>

共有2个答案

乜承嗣
2023-03-14

我也遇到了同样的挑战。在我的例子中,最初的spring配置是使用XML完成的。我已经设法将XML配置与Java配置结合起来,因为Java配置为您配置MongoClientOptions:

@Configuration
public class MongoClientWrapper {

    @Bean
    public MongoClient mongo() 
    {
        //credentials:
        MongoCredential credential = MongoCredential.createCredential("user", "auth-db", "password".toCharArray());

        MongoClientOptions options = MongoClientOptions.builder()
                .addConnectionPoolListener(new MyConnectionPoolListener())
                .build();
        return new MongoClient(
                new ServerAddress("localhost", 27017),      //replica-set
                Arrays.asList(credential)
                ,options
                );
    }


    @Bean
    public MongoTemplate mongoTemplate()
    {
        return new MongoTemplate(mongo(), database);
    }
    ...
}

希望这对某人有帮助...

沈博涉
2023-03-14

的确,没有办法通过spring数据MongoDB模式添加连接池侦听器,但是维护repo的人员建议了一个解决方案,即在将MongoClientOptions传递给mongo客户端之前使用BeanPostProcessor更改MongoClientOptions,如下所示

@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;
}

这样做成功地为我注册了ConnectionPoolStatisticsSmBeans

 类似资料:
  • 我正在尝试在webspphere自由服务器上为oracle数据库启用连接池指标。根据此留档https://www.ibm.com/docs/en/was-liberty/nd?topic=10-connectionpool-monitoring在功能管理器中添加监视器-1.0功能并添加此行WebSphere: type=ConnectionPoolStats, name= 我正在使用jmx_exp

  • Spring-Data-MongoDB。我如何使用spring-data-mongodb库在mongo中动态创建数据库? 我试图使用Spring-Mongodb-Data模块对Mongo数据库进行CRUD操作,通过示例和文章,我的假设是在定义MongoTemplate bean时应该在spring上下文xml中预定义databasename。 请帮帮我. 谢谢-RK

  • 我想监视spring-data-redis中的池度量。JedisconnectionFactory的游泳池是私人的。我怎么才能拿到?我搜索谷歌,但我找不到很好的方法做到这一点。

  • 我想监控并定期记录有关Redis连接池使用情况的信息。 我通过spring-data-redis RedisTemboard对象使用Redis。 有办法进入游泳池吗?

  • 我有以下设置: null 它应该每3秒轮询一次Mongo,但它实际上从来没有这样做(再次,它在本地工作没有问题)。 之后连接工作良好,因为我有另一个由文件上传触发的进程,它工作正常(数据被写入MongoDB)。 老实说,我有点困惑是哪个组件在这里出了问题,所以我希望你能帮我缩小范围。

  • 问题内容: 我正在使用最新的spring-data- mongodb(1.1.0.M2)和最新的Mongo驱动程序(2.9.0-RC1)。我遇到这样的情况,我有多个客户端连接到我的应用程序,并且我想在同一台Mongo服务器中为每个客户端提供自己的“模式/数据库”。如果我直接使用驱动程序,这并不是一件很难的事情: 看,容易。但是spring-data- mongodb不允许使用简单的方法来使用多个数