Activemq代理挂起,hikariCP和自动提交设置为false

Activemq代理挂起,hikariCP和自动提交设置为false,activemq,hikaricp,autocommit,Activemq,Hikaricp,Autocommit,我的应用程序中有一个需要DS的嵌入式ActiveMQ。我使用Tomcat CP(已经好几年了),现在正试图切换到Hikari。MQ代理的startAsynch标志设置为false 在配置Hikari时,如果我将autoCommit设置为false,ActiveMQ代理将在启动期间挂起 然而,如果我将autocommit设置为True,那么就没有问题了,并且代理程序运行正常 另一方面,如果我在startAsynch标志为true的情况下启动ActiveMQ,则代理不会出现任何问题,即使Hikari

我的应用程序中有一个需要DS的嵌入式ActiveMQ。我使用Tomcat CP(已经好几年了),现在正试图切换到Hikari。MQ代理的startAsynch标志设置为false

在配置Hikari时,如果我将autoCommit设置为false,ActiveMQ代理将在启动期间挂起

然而,如果我将autocommit设置为True,那么就没有问题了,并且代理程序运行正常

另一方面,如果我在startAsynch标志为true的情况下启动ActiveMQ,则代理不会出现任何问题,即使Hikari中的autoCommit设置为false

这里有一个有趣的标题——它出现在tomcat CP中,自动提交使用底层驱动程序使用的任何东西——在我的例子中,它是oracle驱动程序,oracle驱动程序的默认值是autocommit,它似乎设置为true

ActiveMQ版本为5.16.0,Hikari版本为3.4.5

HikariCP配置为:

<bean id="dataSourceForBroker" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <property name="driverClassName" value="${driverClassName}"/>
    <property name="jdbcUrl" value="${url}"/>
    <property name="username" value="${dbusername}"/>
    <property name="password" value="${password}"/>
    <property name="maximumPoolSize" value="${dbSessionMaxActive}" />
    <property name="autoCommit" value="false"/>
    <property name="minimumIdle" value="10" />
    <property name="maxLifetime" value="30000" />
    <property name="connectionTimeout" value="60000" />
</bean>
有关于为什么会发生这种情况的建议吗?我在这里有点迷路了

提前谢谢
-anish

你为什么要尝试切换到Hikari?好问题-不幸的是,我没有一个好答案,只是我正在试验它是否性能更好。如果连接池实现是ActiveMQ 5.x的性能瓶颈,我会感到惊讶。当然,它也有它的局限性。旨在解决这些限制。如果你想要一个更高性能的ActiveMQ版本,我建议你试试。Thx的指针-将研究Artemis。然而,暂时忽略性能-我试图找到配置不工作的原因不幸的是,我不知道配置不工作的原因。您可以尝试在代理挂起时获取一些线程转储,查看它在做什么,然后在GitHub中查找代码。
public void ccreateBroker(){
    BrokerService broker = new BrokerService();
    broker.setBrokerId("myBroker");
    broker.setBrokerName("myBroker");
    broker.setPersistent(true);
    broker.setUseJmx(true);
    broker.setUseShutdownHook(true);
    broker.setStartAsync(false);
    broker.requestRestart();
    broker.getManagementContext().setConnectorPort(9999);
    broker.addShutdownHook(() -> {
        brokerStarted = false;
        logger.info("Active MQ broker was shutdown");
    });

    ManagementContext managementContext = new ManagementContext();
    managementContext.setCreateConnector(false);
    broker.setManagementContext(managementContext);

    JDBCPersistenceAdapter jdbcPersistenceAdapter = new JDBCPersistenceAdapter();
    jdbcPersistenceAdapter.setDataSource(dataSource);
    LeaseDatabaseLocker leaseDatabaseLocker = new LeaseDatabaseLocker();
    try {
        broker.setPersistenceAdapter(jdbcPersistenceAdapter);
        jdbcPersistenceAdapter.setLockKeepAlivePeriod(5000);
        leaseDatabaseLocker.setLockAcquireSleepInterval(10000);
        jdbcPersistenceAdapter.setLocker(leaseDatabaseLocker);
        broker.addConnector("vm://hexgenBroker");
        broker.start();
        brokerStarted = true;
    } catch (Exception e) {
        throw new RuntimeException("Broker failed -", e);
    }
}