如何在Apache Beam Java SDK中使用存放在GCS的自定义JDBC jar包
Apache Beam 集成自定义JDBC驱动JAR包操作指南
1. 导入自定义JDBC驱动到Maven依赖
两种可选方案,根据你的项目情况选择即可:
- 方案1:将JAR包安装到本地/私有Maven仓库
执行如下Maven命令完成安装,把路径、groupId、artifactId、版本替换成你实际的驱动信息:
mvn install:install-file -Dfile=/path/to/your-custom-jdbc-driver.jar \ -DgroupId=com.your.company \ -DartifactId=custom-datawarehouse-jdbc \ -Dversion=1.0.0 \ -Dpackaging=jar
之后在pom.xml中添加依赖即可:
<dependency> <groupId>com.your.company</groupId> <artifactId>custom-datawarehouse-jdbc</artifactId> <version>1.0.0</version> </dependency>
- 方案2:直接在项目内引入本地JAR包
先把驱动JAR包放到项目根目录的lib文件夹下,再在pom.xml中添加如下依赖:
<dependency> <groupId>com.your.company</groupId> <artifactId>custom-datawarehouse-jdbc</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/your-custom-jdbc-driver.jar</systemPath> </dependency>
注意:该方案需要后续打包时配置强制把system scope的依赖打进最终包。
2. 配置Maven打包插件,确保驱动被打入作业包
使用maven-shade-plugin打包所有运行时依赖,避免分布式运行时出现类找不到的问题,pom.xml插件配置示例:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- 如果用方案2导入本地JAR,需要加这个配置强制包含system scope依赖 --> <includeSystemScope>true</includeSystemScope> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
3. 适配JdbcIO代码
你提供的示例代码只需要修改两个参数即可直接使用:
- 将
MYDRIVERCLASS替换为自定义JDBC驱动的全限定类名,比如com.your.company.jdbc.CustomDataWarehouseDriver - 将
DATABASE_URL替换为你自研数仓对应的JDBC连接串,格式一般为jdbc:your-db-name://ip:port/dbname
如果是写入数仓的场景,改用JdbcIO.write()方法,数据源配置逻辑完全一致。
4. 运行时常见问题规避
- 不要把自定义JDBC驱动的scope设为
provided,否则打包时不会被包含进去 - 如有额外的连接参数,可调用
.withDriverProperties(Properties props)方法传入自定义配置 - 运行时如果报
ClassNotFoundException,先解压打包好的fat jar,确认驱动的类文件是否被正常打包进去
内容的提问来源于stack exchange,提问作者Sourav Chatterjee
相关产品推荐
相关产品推荐

