关于Kettle和webService的一个Demo,整整思路

本文介绍了如何结合Kettle和WebService实现数据处理流程。通过编写webService服务端生成文件,然后利用Kettle的job操作该文件。在实践中遇到文件格式转换问题(Unix转DOS)、动态文件名的实现以及并发高时可能出现的问题。针对文件名动态化,提出了覆盖文件并复制备份的方法,但并发问题尚待解决。此外,还讨论了文本文件中不规范数据的处理挑战。

索引

自己写个webService服务端,让客户调用,客户调用后生成一个格式文件,再叫Kettle执行job,操作这个文件。
于是思路如下
webservice:

 @Override
    public void saveUser( User user) {
        //生成txt文件
        FileUtil.test(user);
        //调用kettle
        String s = "cmd /c start D:\\pdi-ce-9.0.0.0-423\\data-integration\\pan.bat -rep=local -user=admin -pass=123456 -trans=test -dir=/";
        Process ps = null;
        try {
            ps = Runtime.getRuntime().exec(s);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(ps.getInputStream());

    }

FileUtil工具类:

public static void test(User user){
        String directory="C:/Users/Pinole5/Desktop/";
        String filename="a.txt";
        File file=new File(directory);
        boolean exists = file.exists();
        if (!file.exists()) {

            file.mkdirs();
        }
        File file2=new File(directory,filename);
        if (!file2.exists()) {
            try {
                file2.createNewFile();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //向指定文件中写入文字
        FileWriter fileWriter;
        try {
            fileWriter = new FileWriter("C:/Users/Pinole5/Desktop/a.txt");
            //使用缓冲区比不使用缓冲区效果更好,因为每趟磁盘操作都比内存操作要花费更多时间。
            //通过BufferedWriter和FileWriter的连接,BufferedWriter可以暂存一堆数据,然后到满时再实际写入磁盘
            //这样就可以减少对磁盘操作的次数。如果想要强制把缓冲区立即写入,只要调用writer.flush();这个方法就可以要求缓冲区马上把内容写下去
            BufferedWriter sb=new BufferedWriter(fileWriter);
            sb.write("id;name;\n");
            sb.write(user.getId() + ";" + user.getName() + ";");
            sb.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

遇到的问题:生成txt文件后,格式变成了Unix,不再是DOS,需要注意。
待实现:
 1.kettle的文本文件输入,要动态文件名
我的想法是,kettle只支持路径为变量,那么webservice生成的文件就给它覆盖掉,覆盖之前把生成的文件copy一份放到指定位置,再写死文件名就相当于动态了,可有一个很严重的问题:并发很高的情况就崩了。
 2.文本文件里数据不规范怎么处理,比如下图,除了字段id,name,数据里边还有字段id2,name2,并且这个id2,name2下边的数据都属于id2,name2

数据这个就有点狗了,有想法和实现后再来补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值