datax-webExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%

今天就跟大家聊聊有关datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联成立于2013年,先为路北等服务建站,路北等地企业,进行企业商务咨询服务。为路北企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

问题:

select * from dbo.SKJJGWFGXX where (i_time >= '1980-01-01%00:00:00' and i_time < '2020-12-15%15:25:40') 具体错误信息为:com.microsoft.sqlserver.jdbc.SQLServerException: 从字符串转换日期和/或时间时,转换失败。

时间字符串中带%,MySQL数据库能识别并正确执行,而sqlserver数据库(2008)不能识别,造成查询失败。

如果此问题不解决,那么从sqlserver到mysql的数据同步中,无法采用时间增量方式进行数据实时同步。

在java中和python中都尝试把“%”换成空格,最后的结果都是无法运行。估计是在命令行中做为参数传入时,空格本身是特殊符号,用于分开命令和参数的,强行替换,最后导致时间字符串被分成两段接收。

解决方案:

修改ExecutorJobHandler,生成job临时文件时,把临时文件中的变量用具体值进行替换。

datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%

定义了一个新的处理方法:replaceJobJsonParams

datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%

// zhuangxl 2020.12.15 替换开始

String jobJson = new String(trigger.getJobJson());

jobJson = replaceJobJsonParams(jobJson, trigger);

tmpFilePath = generateTemJsonFile(jobJson);

// zhuangxl 2020.12.15 替换结束

/**

 * 替换job文件参数

 * @author zhuangxl

 * @param jobJson

 * @return

 */

private String replaceJobJsonParams(String jobJson, TriggerParam trigger) {

    if (IncrementTypeEnum.TIME.getCode() == trigger.getIncrementType()) {

        String replaceParamType = trigger.getReplaceParamType();

        //类别:时间自增,只操作指定了具体的时间格式的类型

        if (StringUtils.isNotBlank(replaceParamType) && !replaceParamType.equals("Timestamp")) {

            //格式化时间字符串

            SimpleDateFormat sdf = new SimpleDateFormat(replaceParamType);

            String endTime_ = sdf.format(trigger.getTriggerTime());

            String startTime_ = sdf.format(trigger.getStartTime());

            //识别要替换的时间变量名称

            String[] replaceParams = trigger.getReplaceParam().split(" ");

            String startTimeStr = replaceParams[0].substring(replaceParams[0].indexOf("D")+1, replaceParams[0].indexOf("="));

            String endTimeStr = replaceParams[1].substring(replaceParams[1].indexOf("D")+1, replaceParams[1].indexOf("="));

            //执行变量替换

            jobJson = jobJson.replace("${"+startTimeStr+"}", "'"+startTime_+"'");

            jobJson = jobJson.replace("${"+endTimeStr+"}", "'"+endTime_+"'");

        }

    }

    return jobJson;

}

看完上述内容,你们对datax-web ExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


本文标题:datax-webExecutorJobHandler如何修改源码解决sqlserver时间格式不识别时间字符串中的%
文章源于:http://scjbc.cn/article/pgeggj.html

其他资讯