Activemq代理与hikariCP一起挂起并将自动提交设置为false

问题描述

我的应用程序中有一个嵌入式ActiveMQ,需要一个DS。我使用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 Config是:

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

创建代理的代码段是

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

为什么会出现这种情况?我在这里迷路了

先谢谢 -修饰

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)