刚开始接触kettle,没有系统的翻阅kettle的文档,从开发到生产的部署走了不少弯路。比如我们的数据库连接配置是直接写到转换里的,比如这样:
这样写跑起来没有什么问题,但是从开发到测试,再到生产问题就来了。每次部署都要手动修改这里的连接配置。那部署起来真是相当的麻烦。好在kettle本身已经提供很好的解决方案,就是直接通过配置文件方式。
首次运行spoon后,spoon会在用户的主目录下生成一个 .kettle的文件夹
这个目录官方是这样描述的:windows 用户请找对地方,嘿嘿ಠ౪ಠ
目录下面默认只有一个kettle.properties文件,这个文件主要用于配置kettle的全局变量,包括我们使用的数据库连接配置都可以在这里面配置。
但是仔细看下data-integration的目录结构你会发现一个simple-jndi目录。
这个目录下面有个jdbc.propertis, 内行一眼就看出了门道,数据库配置应该都在这里配置。这种是通过JNDI的方式连接数据库。
下面我们尝试两种不同的配置方式
一、全局变量的方式
- 打开spoon,新建转换
- 基于mysql官方实例库 Sakila (下载连接)实现一个数据查询转换,在design选项卡中输入 table(ps:用英文版本,是因为搜索steps比较方便,默认语言是系统的语言,可以根据喜好自行配置)
- 将table input 拖到右边的设计窗口,双击table input
- 选择New创建一个新的数据库连接
- 配置完成后点击 Test,测试连接是否正确。默认情况会出现如下结果,原因是没有找到mysql 驱动。
- 拷贝mysql 驱动到data-integration的lib目录中
- 先保存当前配置,免得重新配置,保存后重新启动spoon,然后再次点击测试连接,出现下面界面时,数据库连接配置就ok了。点击ok保存数据库连接配置。
- 写个简单的sql测试下
- 点击预览,输入预览行数,这里输入了10行,数据少,测试速度快,土豪请随意
- 到此数据库连接测试就完成了
- 下面我们将数据库连接配置改为配置文件的方式, 修改用户主目录下的kettle.properties文件 mac 或linux 可以直接执行
vi ~/.kettle/kettle.properties
添加mysql连接配置信息
db.demo.mysql.host=127.0.0.1
db.demo.mysql.port=3306
db.demo.mysql.username=root
db.demo.mysql.password=
db.demo.mysql.database=sakila
配置效果图:
上面是默认生成的注释性文档,我们直接加载最后就行了。
- 重启spoon,再次打开table input, 编辑刚才配置的数据库连接
- 为了再次验证配置的有效性,我们随意修改一下配置项,比如修改下密码,重启spoon,测试效果。
- 部署到生产,需要配置数据库密码。密码可以明文直接配置到password属性上,但不推荐。因为不太安全。如果不在意这个,那就随意了。data-integration 目录下有两个脚本可以对数据库密码进行加密,bat 是windows系统的,sh是linux或者mac平台的
- 执行 ./encr.sh -kettle 123 将会加密123为 Encrypted 2be98afc86aa7f2e4cb79ce10bec3fd89
- 将密码考到配置中即可,一定要保留 Encrypted, 要不然程序以为是明文,那就不对了。
二、配置JNDI的方式
- 修改
simple-jndi/jdbc.properties
文件,添加如下行
demo_mysql/type=javax.sql.DataSource
demo_mysql/driver=com.mysql.jdbc.Driver
demo_mysql/url=jdbc:mysql://127.0.0.1:3306/sakila?useUnicode=true&characterEncoding=utf8
demo_mysql/user=root
demo_mysql/password=
配置效果图:其中 斜杠前面为jndi名称,可在程序中直接引用。
- 重启spoon,编辑上面的table input,再新建一个数据库连接,配置入下图:
- 通过新建的jndi连接测试sql查询
小结:
- 以上两种方式均解决了环境不同导致连接配置不同,并因此需要修改转换或者作业的情况。具体采用哪种方式更好,需要自行根据实际情况判断。
- 全局配置 除了用于数据配置,还可用于项目的工作目录配置,转换的脚本的目录配置。解决开发、测试和生产中路径不同的问题。