java调用kettle自定义kettle.properties配置文件路径

java调用kettle自定义kettle.properties配置文件路径

默认路径

java调用kettle的jar包时,在初始化环境的时候,会在指定路径创建并加载kettle的kettle.properties文件,该文件的默认位置为 ${user.dir}/.kettle/kettle.properties,在不同的系统上,${user.dir} 的默认位置如下:

系统路径
WindowsC:\Users\用户\.kettle\kettle.properties
Macos/Users/用户名/.kettle/kettle.properties
Linux/home/用户名/.kettle/kettle.properties

但是如果你设置了KETTLE_HOME 这个环境变量,Kettle将会在该路径下查找或创建kettle.properties文件:${KETTLE_HOME}/.kettle/kettle.properties

源码如下:

/**
* Looks up the user's home directory (or KETTLE_HOME) for every invocation. This is no longer a static property so
* the value may be set after this class is loaded.
*
* @return The path to the users home directory, or the System property {@code KETTLE_HOME} if set.
*/
public static String getUserHomeDirectory() {
    return NVL( System.getenv( "KETTLE_HOME" ), NVL( System.getProperty( "KETTLE_HOME" ),
                                                    System.getProperty( "user.home" ) ) );
}

修改默认路径

直接设置 KETTLE_HOME 即可

public static void initEnvironment() throws IOException, KettleException {
    System.setProperty("KETTLE_HOME","/Volumes/DATA/temp/kettle");
    KettleEnvironment.init();
    String directory = Const.getKettleDirectory();
    System.out.println("KETTLE_HOME:"+directory);
  }

log输出如下

KETTLE_HOME:/Volumes/DATA/temp/kettle/.kettle

默认加了.kettle 路径
如果不想要.ketttle这个目录,可以参考如下方法:
源码如下

 public static String getKettleDirectory() {
    return getUserHomeDirectory() + FILE_SEPARATOR + getUserBaseDir();
  }

 /**
   * Determines the Kettle directory in the user's home directory.
   *
   * @return The Kettle directory.
   */
  public static String getUserBaseDir() {
    return BasePropertyHandler.getProperty( "userBaseDir", ".kettle" );
  }

源码中未找到设置 userBaseDir 的地方,但是可以利用java的反射来修改

public static void initEnvironment() throws IOException, KettleException {
    System.setProperty("KETTLE_HOME","/Volumes/DATA/temp");
    
    //反射修改 userBaseDir
    BasePropertyHandler instance = BasePropertyHandler.getInstance();
    Object instanceHandler = ReflectUtil.invoke(instance, "getInstanceHandler");
    java.util.LinkedList<OverlayProperties> propList = (java.util.LinkedList<OverlayProperties>) ReflectUtil.getFieldValue(instanceHandler, "propList");
    OverlayProperties overlayProperties = new OverlayProperties("");
    overlayProperties.setProperty("userBaseDir","kettle");
    propList.add(overlayProperties);
    

    //环境初始化
    KettleEnvironment.init();

    String directory = Const.getKettleDirectory();
    System.out.println("directory:"+directory);
    
    // 获取配置参数
    String params = EnvUtil.getSystemProperty("KETTLE_LAZY_REPOSITORY");
    System.out.println("params:"+params);
  }

日志输出如下

directory:/Volumes/DATA/temp/kettle
params:false
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值