在用kettle进行数据库数据同步时,需要设置数据库连接信息,但是一般开发环境和生产环境数据库不一样,如果在开发阶段把数据库连接信息写死,那么在生产环境部署时又要重新打开.krt或.kjb文件重新编辑数据库连接信息。解决方法是数据库连接信息可以通过命令行参数传入,这样只需要在启动时改变一下参数就可以了。下面以配置一个简单的表输入为例来说明。
新建一个转换,数据库连接信息设置如下,注意我们都是用的变量,没有写死数据库连接信息。这里说个小插曲,如果我们定义的数据库连接没有在转换中用到,那么下次打开文件的时候这个定义的数据库连接就会消失,不得不吐槽这设计。。。
接下来我们定义一个转换,随便从数据库查点什么。
接下来在文件空白处右键,选择“转换设置”,在命名参数标签下设置我们刚才用到的4个参数。这个参数还可以设置默认值,也就是我们在命令行不指定参数值时会用默认值,设置默认值还有个好处是我们在spoon中调试时可以直接用这个默认值,不然每次我们在spoon中运行ktr文件时还要手动输入这些参数。我这里就先不设置了。
以上都设置好后,保存文件,然后输入如下命令执行即可将参数传入.ktr文件中进行使用。这里为了后期方便修改参数值,我设置了一些bat相关的变量。命令行有一个地方一定要注意,/param:"xxx=xxx"这里的双引号不能省略,我就在这里踩坑了,不加双引号参数是传递不了的。
:: kettle软件安装路径
set kettlePath=E:\zzj\apps\data-integration
:: *.kjb文件存放路径
set jobPath=E:\zzj\javaweb\ETL
:: 数据库连接url
set dbUrl=localhost
:: 数据库名
set dbName=mybatis
:: 数据库连接用户名
set dbUsername=root
:: 数据库连接密码
set dbPassword=123456
%kettlePath%\pan /file %jobPath%\test.ktr /param:"db_url=%dbUrl%" /param:"db_name=%dbName%" /param:"db_username=%dbUsername%" /param:"db_password=%dbPassword%"
执行成功