在使用flink连接tdengine时,第一次连接没有问题,当重启任务时,出现flink Native Library libtaos.so already loaded in another classloader异常。简单来说原因就是java的类加载机制,多个flink任务的类加载器,对tdengine的客户端库libtaos.so进行了多次加载。
解决的办法:
将tdengine客户端的jar包放到flink所在服务器的java环境的扩展依赖环境中,这样java应用的依赖就直接使用ext加载的类库,不再自己加载,就能保证不再重复加载。
将taos-jdbcdriver-2.0.38.jar及其依赖包,放入到/opt/java/jdk/jre/lib/ext文件夹下,java工程的pom文件中再把该依赖包的scope设置为provided。
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>2.0.38</version>
<scope>provided</scope>
</dependency>