1、kettle工具下載java
連接: https://pan.baidu.com/s/13Mx-QJkY-5dY-nDIpuZAzw 提取碼: x146mysql
pdi-ce-8.1.0.0.zip就是kettle軟件 下載以後解壓 進入文件夾根目錄點擊Spoon.bat就能開啓客戶端linux
2、kettle使用spring
1.須要鏈接上兩個數據庫 一個是你想要copy的庫 還有一個是你本身的庫 我這裏是須要從一個oracle庫拿到數據 而後放入到我這邊的mysql數據庫sql
2.右鍵DB鏈接 新建鏈接數據庫
3.我這裏使用的是oracle和mysql須要兩個鏈接包 在我網盤連接裏有 ojdbc14-10.2.0.2.0.jar和mysql-connector-java-5.1.41.jar 拷貝放入到kettle的lib下上一步就可鏈接成功apache
4.而後就是兩個庫的關聯映射 點擊文件---新建----轉換 將如下兩個 表輸入和插入/更新拖到轉換之中 用shift將兩個鏈接起來 效果以下windows
5.點擊表輸入 鏈接上你想要拷貝數據庫的源數據庫 獲取sql語句就是查詢你想要的表的數據服務器
6.點擊 插入更新 鏈接上你的本地數據庫 瀏覽找到對應表 關聯上兩個表的惟一標示id 相似主鍵關聯 kettle根據這個判斷插入仍是更新oracle
而後下面關聯上你想要更新的字段點肯定就能夠跑起來了
7.這樣你就能夠從一個庫同步數據到你的庫 你能夠在你本機windows下運行也能夠在linux系統下部署kettle 而後能夠新建job來調用轉換 實現定時更新數據
保存這個轉換你能夠獲得一個.ktr文件 純Java編寫的能夠集成到Java項目之中
3、集成到java項目
1.以上 的方式能夠拿到數據 不過部署到linux系統因爲kettle有點大 再去服務器中調用 想一想仍是算了 仍是集成到Java項目中更合理
2.集成到java項目須要幾個包
<!-- kettle相關jar包 -->
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>8.1.0.0-365</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>8.1.0.0-365</version>
</dependency>
<dependency>
<groupId>pentaho</groupId>
<artifactId>metastore</artifactId>
<version>8.1.0.0-365</version>
</dependency>
<dependency>
<groupId>org.apache</groupId>
<artifactId>commons-vfs2</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>17.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!-- kettle jar包結束 -->
3.jar包我分享的網盤有 國內鏡像沒有kettle相關包 能夠把個人包加入你maven的本地倉庫中就好 有些是沒用的 根據上面我給的pom加就好
4.建立一個service類 調用kettle的轉換生成的.ktr文件就能夠集成到java中 而後咱們可使用spring定時調度框架Task定時調用這個類就實現了定時更新數據 是否是很方便啊 嘿嘿嘿
@Service("getCompanyInfoService")
public class GetCompanyInfoService {
/*
//main方法用於測試
public static void main(String[] args) {
//ktr文件路徑 String filePath =CompanyAndVehicleInfo.companyPath; //指定xml解析
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
runKtr(filePath);
}
*/
public static void runKtr() {
// ktr文件路徑
String filePath = CompanyAndVehicleInfo.companyPath;
// 指定xml解析
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
try {
// 初始化
KettleEnvironment.init();
// 建立ktr元對象
TransMeta transMeta = new TransMeta(filePath);
// 建立ktr
Trans trans = new Trans(transMeta);
// 執行ktr
trans.execute(null);
// 等待執行完畢
trans.waitUntilFinished();
// 判斷執行是否出錯
if (trans.getErrors() > 0) {
System.err.println("文件執行出錯!!!!!!!!");
}
} catch (KettleException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.Task類
@Component
@EnableScheduling
public class CompanyAndCycleTask {
@Autowired
private GetCompanyInfoService getCompanyInfoService;
// 設置天天2.00
@Scheduled(cron = "0 0 2 * * ?")
@Scheduled(fixedRate = 1000 * 60 * 10)
public void getCompanyInformation() {
getCompanyInfoService.runKtr();
}