pom

	<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<flink.version>1.11.2</flink.version>
<scala.binary.version>2.11</scala.binary.version>
<scala.version>2.11.12</scala.version>
<log4j.version>2.12.1</log4j.version>
</properties> <dependencies>
<!-- Apache Flink dependencies -->
<!-- These dependencies are provided, because they should not be packaged into the JAR file. -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-scala_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
<scope>compile</scope>
</dependency> <!-- Scala Library, provided by Flink as well. -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
<scope>compile</scope>
</dependency> <!-- Add connector dependencies here. They must be in the default scope (compile). --> <!-- Example: <dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
--> <!-- Add logging framework, to produce console output when running in the IDE. -->
<!-- These dependencies are excluded from the application JAR by default. -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
<scope>runtime</scope>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency> <dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0-Production</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency> </dependencies>

Job_Data_Oracle_To_MySql.scala

package org.myorg.quickstart

import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet, Timestamp}
import java.text.SimpleDateFormat
import java.util.Date import org.apache.flink.configuration.Configuration
import org.apache.flink.streaming.api.functions.sink.{RichSinkFunction, SinkFunction}
import org.apache.flink.streaming.api.functions.source.{RichSourceFunction, SourceFunction}
import org.apache.flink.streaming.api.scala._ object Job_Data_Oracle_To_MySql { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment env.addSource(new OracleSource)
.name("OracleSource")
.addSink(new MySqlSink)
.name("MySqlSink")
.setParallelism(1) env.execute("Data From Oracle To MySql")
} def NowDate(): String = {
val now: Date = new Date()
val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
val date = dateFormat.format(now)
return date
}
} case class TB_TEST01(ID: Int, NAME: String, CTIME: Date) class OracleSource extends RichSourceFunction[TB_TEST01] { var conn: Connection = _
var selectStmt: PreparedStatement = _
var isRunning: Boolean = true override def open(parameters: Configuration): Unit = {
// 加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver")
// 数据库连接
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/orcl", "lxw", "123456")
selectStmt = conn.prepareStatement("select * from TB_TEST01")
} override def run(sourceContext: SourceFunction.SourceContext[TB_TEST01]): Unit = { while (isRunning) {
var resultSet: ResultSet = selectStmt.executeQuery()
while (resultSet.next()) {
var ID: Int = resultSet.getInt("ID")
var NAME: String = resultSet.getString("NAME")
var CTIME: Date = resultSet.getTimestamp("CTIME")
sourceContext.collect(TB_TEST01(ID, NAME, CTIME))
}
println(Job_Data_Oracle_To_MySql.NowDate() + "暂停5秒")
Thread.sleep(5000)
}
} override def close(): Unit = {
selectStmt.close()
conn.close()
} override def cancel(): Unit = {
isRunning = false
}
} class MySqlSink extends RichSinkFunction[TB_TEST01] { var conn: Connection = _
var insertStmt: PreparedStatement = _
var updateStmt: PreparedStatement = _ override def close(): Unit = {
insertStmt.close()
updateStmt.close()
conn.close()
} override def open(parameters: Configuration): Unit = { Class.forName("com.mysql.cj.jdbc.Driver")
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&autoReconnect=true&serverTimezone=UTC"
, "root"
, "123456")
insertStmt = conn.prepareStatement("INSERT INTO `test`.`tb_test01`(`id`, `name`, `ctime`) VALUES (?, ?, ?)")
updateStmt = conn.prepareStatement("UPDATE `test`.`tb_test01` SET `name` = ?, `ctime` =? WHERE `id` = ?")
} override def invoke(value: TB_TEST01, context: SinkFunction.Context[_]): Unit = { // 执行更新语句
updateStmt.setString(1, value.NAME)
updateStmt.setTimestamp(2, new Timestamp(value.CTIME.getTime))
updateStmt.setInt(3, value.ID)
updateStmt.execute()
//如果update没有更新 即 没有查询到数据 即 没有该id 那么执行插入
if (updateStmt.getUpdateCount == 0) {
println(Job_Data_Oracle_To_MySql.NowDate() + "------------------插入数据>>" + value)
insertStmt.setInt(1, value.ID)
insertStmt.setString(2, value.NAME)
insertStmt.setTimestamp(3, new Timestamp(value.CTIME.getTime))
insertStmt.execute()
} else {
println(Job_Data_Oracle_To_MySql.NowDate() + "------------------更新数据>>" + value)
} } }

控制台输出

Oracle中

MySql中

flink scala 从Oracle同步数据到MySql的更多相关文章

  1. Flink 异步IO访问外部数据(mysql篇)

    接上篇:[翻译]Flink 异步I / O访问外部数据 最近看了大佬的博客,突然想起Async I/O方式是Blink 推给社区的一大重要功能,可以使用异步的方式获取外部数据,想着自己实现以下,项目上 ...

  2. 定时执行rsync同步数据以及mysql备份

    需求:把机器A中的附件.图片等,备份到备份机B中.将数据库进行备份 附件备份 在A中,启动rsync服务,编辑/etc/xinetd.d/rsync文件,将其中的disable=yes改为disabl ...

  3. 大数据批量导入,解决办法,实践从定时从 sqlserver 批量同步数据到 mySql

    c#代码,批量导入数据代码 public class MySql_Target : ZFCommon.DataAccesser.Base.DABase { public MySql_Target() ...

  4. ORACLE GOLDEN GATE oracle同步数据至kafka

    一.服务器信息 ip   软件版本 ogg版本 软件包 操作系统版本 OGG安装路径 10.1.50.52 源 oracle11.2.0.4 12.2.0.1.1 V100692-01.zip cen ...

  5. 从Oracle同步数据到SQLServer——大小写敏感设置

    Oracle默认是大小写敏感,而SQLServer默认大小写不敏感, 尤其是涉及主键字段时,注意请提前设置SQLServer对应的数据库表为大小写敏感,不然会报主键冲突的错误. 设置表内大小写敏感 A ...

  6. Clickhouse单机部署以及从mysql增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能 ...

  7. 实现从Oracle增量同步数据到GreenPlum

    简介: GreenPlum是一个基于PostgreSQL数据库开发的MPP架构的数据库仓库,适用于OLAP系统,支持50PB(1PB=1000TB)级海量数据的存储和处理. 背景: 目前有一个业务是需 ...

  8. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

  9. 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]

    使用MySQL Migration Toolkit快速将Oracle数据导入MySQL上来先说点废话本人最近在学习一些数据库方面的知识,之前接触过Oracle和MySQL,最近又很流行MongoDB非 ...

  10. MYSQL数据库间同步数据

    http://blog.csdn.net/swandy45/article/details/6982421 环境要求: Windows 操作系统 需要Mysql 3.23.15以后的版本. 假设数据库 ...

随机推荐

  1. UVA11573 Ocean Currents

    题目链接 题目 见链接. 题解 知识点:BFS. 这道题显然用BFS,但发现洋流方向会破坏时间的有序性,但注意到洋流时间花费是 \(0\) ,因此只需要用双端队列即可,洋流方向扩展直接放队头,其他方向 ...

  2. Java并发编程之美

    简介 <Java并发编程之美>分为三部分,第一部分为Java 并发编程基础篇,主要讲解Java 并发编程的基础知识.线程有关的知识和并发编程中的其他相关概念,这些知识在高级篇都会有所使用, ...

  3. 【Unity3D】动画回调函数、动画事件、动画曲线

    1 动画回调函数 ​ 动画回调函数是指动画在开始时.执行中.结束时回调的函数,主要有:OnStateEnter.OnStateUpdate.OnStateExit.OnStateMove.OnStat ...

  4. ex命令

    ex命令 ex命令用于在Ex模式下启动vim文本编辑器,ex执行效果如同vi -e,如要从Ex模式回到普通模式,则在vim中输入:vi或:visual指令即可,可以通过运行vi -e来启动ex,也可以 ...

  5. db2伪表sysibm.sysdummy1

    $ db2 describe table sysibm.sysdummy1 Column                         Type      Type name             ...

  6. win32-WH_KEYBOARD的使用

    我们使用WH_KEYBOARD来禁用记事本的ALT的按键 .cpp #include <Windows.h> #include <stdio.h> #include <t ...

  7. 服务端高性能网络IO编程模型简析

    服务端高性能网络IO编程模型简析 一.客户端与服务器端 多数网络应用可以分为客户端(client)和服务器端(server)模型,然后中间通过各种定义的协议来进行两端的通信. 比如常用的 Nginx ...

  8. 利用wiile双层循环打印各种星星---day06

    # 十行十列小星星 j = 0 #定义行数 while j<10: #当行数小于10的时候 i=0 #定义列 while i <10: #当列小于10的时候 print('*',end=' ...

  9. 在矩池云使用Llama2-7B的方法

    今天给大家分享如何在矩池云服务器使用 Llama2-7b模型. 硬件要求 矩池云已经配置好了 Llama 2 Web UI 环境,显存需要大于 8G,可以选择 A4000.P100.3090 以及更高 ...

  10. C#的托盘窗体显示与隐藏效果 - 开源研究系列文章

    今天无聊,进行的C#的编码内容仍然在继续.这些天不断地在完善及编写C#的Winform相关的代码,并将其整理形成博文.这次带来的是关于窗体的显示及隐藏效果的代码段.上次有过一个代码,这次当做新代码进行 ...