温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-12-06 16:32:32 来源:亿速云 阅读:318 作者:柒染 栏目:大数据

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

问题:

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时间格式不识别时间字符串中的%有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI