項目知識學習篇———數據清洗之kettle以及集成到java項目

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();

}

相關文章
相關標籤/搜索