Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://25.79.1.13:90/tide_cloud?connectTimeout=60000&socketTimeout=60000
        at java.sql.DriverManager.getConnection(DriverManager.java:689) ~[?:1.8.0_332]
        at java.sql.DriverManager.getConnection(DriverManager.java:247) ~[?:1.8.0_332]
        at org.apache.flink.connector.jdbc.catalog.MySqlCatalog.getDriverVersion(MySqlCatalog.java:159) ~[?:?]
        at org.apache.flink.connector.jdbc.catalog.MySqlCatalog.<init>(MySqlCatalog.java:93) ~[?:?]
        at com.tide.util.TableAssembler.build(TableAssembler.java:63) ~[?:?]
        at com.tide.Insight.prepare(Insight.java:112) ~[?:?]
        at com.tide.Insight.execute(Insight.java:104) ~[?:?]
        at com.tide.Insight.main(Insight.java:48) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_332]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_332]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_332]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_332]
        at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:355) ~[flink-dist-1.17.1.jar:1.17.1]
        ... 7 more
public void invokeInteractiveModeForExecution() throws ProgramInvocationException {
        FlinkSecurityManager.monitorUserSystemExitForCurrentThread();
        try {
            callMainMethod(mainClass, args);
        } finally {
            FlinkSecurityManager.unmonitorUserSystemExitForCurrentThread();
        }
    }
 this.mainClass =
                loadMainClass(
                        // if no entryPointClassName name was given, we try and look one up through
                        // the manifest
                        entryPointClassName != null
                                ? entryPointClassName
                                : getEntryPointClassNameFromJar(this.jarFile),
                        userCodeClassLoader);

mainClass是 ChildFirstClassLoader加载的,因此java.sql.DriverManager.getConnection也是ChildFirstClassLoader加载的。

因此,

//        log.info(java.sql.DriverManager.class.getClassLoader().toString());
 log.info(Insight.class.getClassLoader().toString());
 log.info(com.mysql.cj.jdbc.Driver.class.getClassLoader().toString());

输出:

org.apache.flink.util.ChildFirstClassLoader@7d81f8b6
sun.misc.Launcher$AppClassLoader@12a3a380

ChildFirstClassLoader 是 Flink 自定义的类加载器,继承自 Java 的 ClassLoader 类,但它的工作机制和 AppClassLoader 不同。
ChildFirstClassLoader 会将子类加载器的类优先加载,而 AppClassLoader 则是按照默认的父类优先加载机制工作。
这两者之间并没有直接的继承关系或父子关系,而是独立存在的,用于不同的目的和场景。

去掉classloader.parent-first-patterns.additional: com.mysql.; org.codehaus.配置之后,
打印:

org.apache.flink.util.ChildFirstClassLoader@69cebb68
org.apache.flink.util.ChildFirstClassLoader@69cebb68

这时候抱错了,提示No suitable driver found for jdbc,猜测原因:

  • java.sql.DriverManager是由Boostrap类加载器加载的
  • com.mysql.cj.jdbc.Driver 是由ChildFirstClassLoader类加载器加载的。

https://juejin.cn/post/7249934982114672695

知识点

1、任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。这句话可以表达更通俗一些:比较两个类是否”相等”,只有再这两个类是有同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。

2、类加载器本身不存在继承关系。 即使有双亲委派关系的存在,一个类的加载器,指的也是实际加载这个类的classLoader

3、每个线程绑定一个classLoader

posted @ 2024-11-03 16:49 耗子哥信徒 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 目前项目中写动态SQL,用的都是下面的语法: @Select("<script>" + "SELECT wr.id,wr.customer_id,wr.type,wr.detail from xxx rel " + "LEFT JOIN xxx wr on rel.rule_id=wr.id whe 阅读全文
posted @ 2024-10-30 18:19 耗子哥信徒 阅读(12) 评论(0) 推荐(0) 编辑
摘要: https://cloud.tencent.com/developer/article/1669299 微服务一般都采用集群方式部署,而且在高并发下经常需要对服务进行扩容、缩容、上线、下线的操作。比如我们需要更新配置,又或者需要同时失效所有服务器上的某个缓存,需要向所有相关的服务器发送命令,此时就可 阅读全文
posted @ 2024-09-25 17:27 耗子哥信徒 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 遇到的问题 MockedStatic<EnvUtil> envUtilMockedStatic; envUtilMockedStatic = Mockito.mockStatic(EnvUtil.class); EnvUtil.setEnvironment(new StandardEnvironme 阅读全文
posted @ 2024-09-25 10:57 耗子哥信徒 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 参考资料 https://blog.csdn.net/qq_36996635/article/details/126062991 首先,应用ServiceA通过DNS查询获取到ServiceB的可用IP列表 DNS-F会拦截到ServiceA的查询请求,判断自己是否该查询的答案,如果有(服务已在VI 阅读全文
posted @ 2024-09-05 09:06 耗子哥信徒 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 车辆GPS流和车辆过地磅重量流union,地磅数据最多晚到5天 使用allowedLateness(5d)可以让窗户等待5天再关闭。 1、第二天flink任务重启了,迟到数据还能处理吗? 2、大部分车辆都没有称重数据,如何提前关闭这些窗口,避免过多浪费内存 设置allowedLateness(5d) 阅读全文
posted @ 2024-08-20 23:27 耗子哥信徒 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 背景说明 我在排查 https://www.cnblogs.com/xushengbin/p/18368362 问题过程中,前前后后花了超过16小时。 做了各种尝试,才搞明白原来是自己上周做了一个性能优化引入的问题。 定位问题原因时间成本很高,原因如下: 最近几天数据不一致的行数明显增多(1天200 阅读全文
posted @ 2024-08-20 09:24 耗子哥信徒 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 问题描述 SingleOutputStreamOperator<Row> aggregatedStream = patrolStream .union(timerGarbageStream) .filter(v -> v.getFacility() != null && (v.getFacility 阅读全文
posted @ 2024-08-19 23:35 耗子哥信徒 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 核心代码 public class TrackLog { private Integer entityId; // flink的时间类型,必须使用LocalDateTime private LocalDateTime statDateTime; public Integer getEntityId( 阅读全文
posted @ 2024-08-02 12:20 耗子哥信徒 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 问题描述 通过doris stream load http接口(请求的是FE地址,中间加了一层nginx反向代理),导入数据时,设置了Expect头,但是接口还是返回: “There is no 100-continue header” 排查方法 1、修改doris debug log level, 阅读全文
posted @ 2024-07-25 13:42 耗子哥信徒 阅读(464) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示