Apache NIFI 自定义处理器给出错误“找不到合适的驱动程序”

问题描述

我创建了一个 nifi 处理器,它应该从数据库中读取一些内容并将结果放入一个属性中。代码很简单,只是创建了一个简单的JDBC连接。

private Connection getDatabaseConnection(ProcessContext context){
    if(databaseConnection == null) {
        try {
            String url = createJDBCUrl(context);
            databaseConnection = DriverManager.getConnection(url,context.getProperty(DB_USER_NAME).getValue(),context.getProperty(DB_PASSWORD).getValue());
        } catch (Exception throwables) {
            throwables.printstacktrace();
        }
    }
    return databaseConnection;
}

private String createJDBCUrl(ProcessContext context) {
    String ip = context.getProperty(DB_IP).getValue();
    String port = context.getProperty(DB_PORT).getValue();
    String dbname = context.getProperty(DB_NAME).getValue();
    return "jdbc:mariadb://" + ip + ":" + port + "/" + dbname;
}

我收到此错误

No suitable driver found for jdbc:mariadb://databaste-ip:3306/database-name

我尝试将 mysql-connector-java-5.1.49 文件放在 nifi lib 文件夹中,但没有成功。此外,我将文件放在资源文件夹中以将驱动程序与处理器捆绑在一起,但也没有成功。 此外,我以不同的方式编写了处理器,并使用了 Apache commons-dbcp 中的 BasicDataSource,因此我可以定义驱动程序文件所在的位置,但再次出现错误

Cannot create JDBC driver of class 'com.MysqL.jdbc.Driver' for connect URL 'jdbc:mariadb://database-ip:3306/database-name'

解决方法

如果您使用的是 jdbc:mariadb: 协议,那么您应该使用 MariaDB Connector/J,而不是 MySQL Connector/J 驱动程序。 MySQL Connector/J 驱动程序只知道 jdbc:mysql: 协议。

或者,如果您想继续使用 MySQL Connector/J,那么您应该使用协议 jdbc:mysql:。然而,鉴于 MySQL 和 MariaDB 是 - 我认为 - 有分歧,最好使用专门为 MariaDB 编写的驱动程序。