楔子
java调用kettle ,变量和参数的设置
java代码中变量会覆盖kettle 里面设置的变量
需要注意变量和参数 他俩是不一样的
public class JobMail {
public static void main(String[] args) throws KettleException {
KettleDatabaseRepository repository = KettleUtils.kettleDbRepository;
String job_path = "/201811_JOB";
String job_name = "A_邮件job_para";
execJob(repository, job_path, job_name);
}
/**
* 执行 JOB
*
* @param repository
* kettle数据库资源库
* @param job_path
* JOB 目录
* @param job_name
* JOB 名称
* @throws KettleException
*/
private static void execJob(KettleDatabaseRepository repository, String job_path, String job_name) throws KettleException {
RepositoryDirectoryInterface dir = repository.findDirectory(job_path);
JobMeta jobMeta = repository.loadJob(repository.getJobId(job_name, dir), null);
Job job = new Job(repository, jobMeta);
// 设置参数
jobMeta.setParameterValue("sql_file", "d://12");
jobMeta.setParameterValue("sql_file_para", "java中参数");
job.setLogLevel(LogLevel.DEBUG);
// 设置变量 java代码中变量会覆盖kettle里面设置的变量
job.setVariable("sql_file", "d://13");
// 启动执行指定的job
job.start();
job.waitUntilFinished();// 等待job执行完;
job.setFinished(true);
System.out.println(job.getResult());
}
}
public class KettleUtils {
private static Logger logger = Logger.getLogger(KettleUtils.class);
private KettleUtils() throws Exception {
throw new Exception("工具类不允许创建");
}
/**
* kettle 资源库
*/
public static KettleDatabaseRepository kettleDbRepository;
static {
if (kettleDbRepository == null) {
kettleDbRepository = getKettleDatabaseRepository();
logger.info("实例化kettle资源库");
}
}
/**
* 设置kettle资源库连接信息
*
* @return
*/
public static DatabaseMeta setDatabaseMeta() {
return new DatabaseMeta(PropUtils.getConfigValByKey("name"), PropUtils.getConfigValByKey("type"), PropUtils.getConfigValByKey("access"), PropUtils.getConfigValByKey("host"), PropUtils.getConfigValByKey("db"), PropUtils.getConfigValByKey("port"), PropUtils.getConfigValByKey("user"), PropUtils.getConfigValByKey("pass"));
}
/**
* kettle 资源库 获取
*
* @return
*/
private static KettleDatabaseRepository getKettleDatabaseRepository() {
try {
KettleEnvironment.init();
// 创建DB资源库
KettleDatabaseRepository repository = new KettleDatabaseRepository();
DatabaseMeta databaseMeta = KettleUtils.setDatabaseMeta();
// 选择资源库 此处参我与本地不一致还是正确执行
KettleDatabaseRepositoryMeta kettleDatabaseRepositoryMeta = new KettleDatabaseRepositoryMeta("Kettle", "Kettle", "Transformation description", databaseMeta);
repository.init(kettleDatabaseRepositoryMeta);
// 连接资源库 DatabaseMeta中已经设置了,不明白此处为何还要再次设置
repository.connect("admin", "admin");
return repository;
} catch (KettleException e) {
e.printStackTrace();
logger.error("kettle资源库连接失败");
}
return null;
}
}