背景
- 最近一直在做数据同步,整体是基于DATAX,进行二次开发。将由集团同步到各个省份。
- 由于前期所挖的坑过深(部门之间模型不统一/程序开发过程中也没有考虑周全),导致后期有很多数据同步需求不能满足,需要进行大量的手工同步任务,《预处理程序》也就这样应运而生。
- 现在主要采用前后台分离-- 应用程序单独开发,所以在联调的时候问题就暴露出来了。
问题
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/****/sync/commons/log/SyncFileAppender : Unsupported major.minor version 52.0
分析及解决过程
虽然很糙,但是值得借鉴
-
首先考虑版本问题–> 我这里用到的是和主机一样的jdk版本, 考虑到联调,用低版本编译之后再运行 --> 没有通过。
-
远程调用 --> 和本地调用不同,开发和测试阶段全在一个主机执行,无论怎么都是用的本机的环境,java -jar ****.jar 是没有问题的,但是联调属于远程调用,故将命令所涉及到的路径全部用绝对路径。
-
就在万分绝望的时候,注意到一个错误,这里也用到了java - *****, 查看源码之后,果然在datax 启动的时候要用到这个路径。这个时候就需要找到datax 安装的路径,找到这个脚本将java的路径改成了绝对路径。 --> 成功了
java -server -Xmx8g -Xms8g -Xmn6g -XX:+UseParallelGC -XX:+UseParallelOldGC -verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/****/datax/log -Djava.library.path=/usr/lib/hadoop/lib/native -Dloglevel=info -Dfile.encoding=UTF-8 -Dlogback.statusListenerClass=ch.qos.logback.core.status.NopStatusListener -Djava.security.egd=file:///dev/urandom -Ddatax.home=/home/****/datax -Dlogback.configurationFile=/home/****/datax/conf/logback.xml -classpath /home/****/datax/lib/*:. -Dlog.file.name=6_1566282663355_json com.alibaba.datax.core.Engine -mode standalone -jobid -1 -job /data1/datax_log/json/datax_zqcszh305.tmp_app_bw_second_card_trmnl_info_mon_month_id=201906_1566282663355.json