我正在编写一个简单的Flink程序,将数据从MySQL移动到Mongo。
我使用的是mysql连接器java8.0.16。
问题
当我尝试连接到我们的测试环境数据库(MySQL 8.0.15(时,程序运行得很好。连接字符串如下所示:
jdbc:mysql://my-test-db-url:3306/my_db_name
但一旦我将它连接到我们的生产数据库(MySQL 8.0.16(,我就得到了:
java.sql.SQLException: No suitable driver found for jdbc:mysql://my-prod-db-url:3306/my_db_name
这些数据库的唯一区别是次要版本(15和16(。
我尝试过的
升级测试数据库以匹配生产数据库版本
我将测试数据库升级到8.0.16,看看那个版本的mysql服务器是否有问题。事实上,现在我也无法连接到测试数据库,得到了同样的异常。
之后,我继续将mysqlconnectorjava和testdb升级到8.0.17,但问题仍然存在。
在我的其他项目中,我可以很好地连接到那些mysql数据库(使用spring-data-jpa和mysql-connector java8.0.18(。所以数据库服务器应该不会有任何问题。
手动将mysql-connector java jar放入flink/lib文件夹
这不起作用
在main类中手动注册驱动程序和我的mysql源函数的open方法
在主类中没有抛出错误
// tried both
Class.forName("com.mysql.jdbc.Driver").newInstance();
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
我还确保在运行maven包后,我的胖罐子确实包含连接器类文件。
现在我几乎一无所知。有人请救我。
我遇到了这个问题,并注意到flink上有一个BUG JIRA:https://issues.apache.org/jira/browse/FLINK-20540.它提供了一条线索:
实例化JdbcCatalog时,baseUrl必须是endswith/。
我试图更改baseUrl,它对我有效。
在调用DriverManager.getConnection
之前,我使用Class.forName("org.sqlite.JDBC")
解决了相同的问题(我使用的是sqlite(。这几乎和您尝试过的一样,但没有调用newInstance()
。