ActiveMQ Classic JDBC Master Slave 持续存在 JDBC 问题,无法使用 MySQL 8 连接器锁定 MySQL 数据库

问题描述 投票:0回答:1

仅使用 JDBC 作为数据源时,您可以使用运行两个代理的主从方法(即一个用于主代理,另一个用于从代理)。我正在为 MySQL 5.7 和 8 客户端使用 MySQL 8 连接器。以下是ActiveMQ配置文件:

<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

     <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">

      <persistenceAdapter>
                <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
                 <jdbcPersistenceAdapter dataDirectory="activemq.data" dataSource="#mysql-ds"/>
        </persistenceAdapter>
    </broker>


    <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.xx.x.xx:3306/activemq_veeru?serverTimezone=UTC"/>
        <property name="username" value="admin"/>
        <property name="password" value="admin"/>
        <property name="poolPreparedStatements" value="true"/>
    </bean>

启动服务时出现以下错误,无法锁定数据库。

Using Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp2.BasicDataSource@6bd16207) | org.apache.activemq.broker.BrokerService | main
Starting Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp2.BasicDataSource@6bd16207) | org.apache.activemq.broker.BrokerService | main
Database adapter driver override not found for : [mysql_connector_j].  Will use default implementation. | org.apache.activemq.store.jdbc.JDBCPersistenceAdapter | main
Database lock driver override not found for : [mysql_connector_j].  Will use default implementation. | org.apache.activemq.store.jdbc.JDBCPersistenceAdapter | main

使用

mysql-connector-java-5.1.49
activemq-jdbc-store-5.13.2
可以正常工作。但是,当我将连接器和 jdbc 存储分别升级到
mysql-connector-j-8.0.31
activemq-jdbc-store-5.17.1
时,我开始了这个问题。

mysql jdbc activemq
1个回答
1
投票

ActiveMQ Classic 从 JDBC 驱动程序提供的

java.sql.DatabaseMetaData#getDriverName
中获取值,并将其映射到服务文件的名称,以找到正确的持久性适配器实现。例如,如果您使用
mysql-connector-java-5.1.49.jar
,则
getDriverName()
的值将为
MySQL Connector Java
,它将映射到服务文件
mysql_connector_java
,该文件指向
org.apache.activemq.store.jdbc.adapter.MySqlJDBCAdapter

但是,由于您使用的是

mysql-connector-j-8.0.31.jar
,因此
getDriverName()
的值是
MySQL Connector/J
,它不会映射到 ActiveMQ Classic 中的任何服务文件。换句话说,目前不支持。

ActiveMQ Classic 没有直接支持 MySQL 8 Connector/J 的版本。您可以使用的最新 MySQL JDBC 驱动程序(无需回退到默认适配器和锁定驱动程序)是 6.0.6

© www.soinside.com 2019 - 2024. All rights reserved.