百度李彦宏融到资金提成1%故事
1. 安装Jar到本地Maven仓库
将pdi-ce-7.1.0.0-12/data-integration/lib下的kettle-core-7.1.0.0-12.jar、kettle-engine-7.1.0.0-12.jar、metastore-7.1.0.0-12.jar安装的本地maven仓库中。
# 切换到pdi-ce-7.1.0.0-12中的lib目录
cd /Users/xxx/Softwares/pdi-ce-7.1.0.0-12/data-integration/lib
mvn install:install-file -Dfile=kettle-core-7.1.0.0-12.jar -DgroupId=org.pentaho -DartifactId=kettle-core -Dversion=7.1.0.0-12 -Dpackaging=jar
mvn install:install-file -Dfile=kettle-engine-7.1.0.0-12.jar -DgroupId=org.pentaho -DartifactId=kettle-engine -Dversion=7.1.0.0-12 -Dpackaging=jar
mvn install:install-file -Dfile=metastore-7.1.0.0-12.jar -DgroupId=org.pentaho -DartifactId=metastore -Dversion=7.1.0.0-12 -Dpackaging=jar
2. 引入依赖
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot-etl-kettle</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-etl-kettle</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<kettle.version>7.1.0.0-12</kettle.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- kettle begin -->
<dependency>
<groupId>org.pentaho</groupId>
<artifactId>kettle-core</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>org.pentaho</groupId>
<artifactId>kettle-engine</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>org.pentaho</groupId>
<artifactId>metastore</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-vfs2</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<!-- kettle end -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3. Test
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootEtlKettleApplicationTests {
private String filename = \"/Users/mengday/Desktop/HelloWorld.ktr\";
@Test
public void testEtl() {
try {
KettleEnvironment.init();
TransMeta transMeta = new TransMeta(filename);
Trans trans = new Trans(transMeta);
// 设置变量(这些变量可以在.ktl中通过${variableName}来引用)
String beginTime = \"2019-04-02 00:00:00\";
String endTime = \"2019-04-06 23:59:59\";
trans.setVariable(\"beginTime\", beginTime);
trans.setVariable(\"endTime\", endTime);
trans.execute(null);
trans.waitUntilFinished();
} catch (KettleException e) {
e.printStackTrace();
}
}
}
实际开发中我们将testEtl()方法中的代码封装到定时任务中,在定时任务中设置定时执行时间,将.ktl文件名或者其它变量值作为参数传递到Job中来执行。