假设我们现在要将一批 Excel 文件导入到一个数据库里, 而Excel 文件的名称和目录是不定的,
这时就要使用变量了.
在 "Excel 输入" 步骤中将文件名设置为一个变量如 ${filename}, 如下图:
根据具体情况的不同, 在运行时可以有三种方式来设置 filename 变量
1. 在运行一个转换之前, 修改 kettle.properties 文件, 在这个文件里设置 filename 变量.
但要注意的是这种方式只能设置英文的参数,如果要设置中文参数, 需要先转换为 Unicode.
2. 如果文件名是存放在一个固定位置的,如数据库里或某个文件里, 这就方便一些了, 只要使用 "设置变量" 步骤, 就可以给
filename 变量赋值了.
3. 通过 API 来设置变量, 这是最灵活的方式了:
下面的这段代码, 说明了如何设置 变量和命令行参数, 并最终运行一个转换
public class TestSystemVariable {
public static void main (String[] args)
{
System.getProperties().put("filename","C:/temp.xls"); // 设置变量
filename, 作为系统变量
EnvUtil.environmentInit(); //初始化环境, 加载 kettle.properties 文件
StepLoader steploader = StepLoader.getInstance();
if (!steploader.read()) { // 加载所有插件和步骤
System.out.println("error load steps");
System.exit(1);
}
try {
TransMeta transMeta = new TransMeta("c:/temp.ktr");
Trans trans = new Trans(LogWriter.getInstance(), transMeta);
trans.execute(new String[]{}); // 在这里可以设置命令行参数
trans.waitUntilFinished(); // 等待所有子线程运行结束
trans.endProcessing("end");
} catch (KettleXMLException e) {
e.printStackTrace();
}
catch (KettleException e) {
e.printStackTrace();
}
}
}