flink 读取oracle,Flink接收RabbitMQ数据写入到Oracle

文件内容

FlinkMain.java

import org.apache.flink.api.common.serialization.SimpleStringSchema;

import org.apache.flink.streaming.api.datastream.DataStreamSource;

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

import org.apache.flink.streaming.connectors.rabbitmq.RMQSource;

import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig;

public class FlinkMain

{

public static void main(String[] args) throws Exception

{

// 1,执行环境

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// 2,RabbitMQ配置

RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()

.setHost("192.168.1.3")

.setPort(5673)

.setUserName("panfeng")

.setPassword("panfeng")

.setVirtualHost("/panfeng")

.build();

// 3,添加资源

DataStreamSource dataStreamSource = env.addSource(new RMQSource(

connectionConfig,

"flink",

true,

new SimpleStringSchema()));

// 4,添加到流,去执行接收到的数据进行入库

dataStreamSource.addSink(new SinkOracle());

// 5,执行工作,定义一个工作名称

env.execute("rabbitmq flink oracle");

}

}

SinkOracle.java

import org.apache.flink.configuration.Configuration;

import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

public class SinkOracle extends RichSinkFunction

{

private Connection connection;

private PreparedStatement statement;

// 1,初始化

@Override

public void open(Configuration parameters) throws Exception

{

super.open(parameters);

Class.forName("oracle.jdbc.OracleDriver");

connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123456");

statement = connection.prepareStatement("INSERT INTO FLINK VALUES (SEQ_FLINK.NEXTVAL,?)");

}

// 2,执行

@Override

public void invoke(String value, Context context) throws Exception

{

System.out.println("value.toString()-------" + value.toString());

statement.setString(1, value);

statement.execute();

}

// 3,关闭

@Override

public void close() throws Exception

{

super.close();

if (statement != null)

statement.close();

if (connection != null)

connection.close();

}

}

pom.xml

org.apache.flink

flink-java

1.9.0

org.apache.flink

flink-streaming-java_2.11

1.9.0

org.apache.flink

flink-connector-rabbitmq_2.11

1.9.0

com.oracle

ojdbc8

12.2.0.1.0

测试步骤

执行 Flink.java中的主方法,往对应队列中传入数据,可以输入到控制台

如果想把配置信息写文件application.properties的话

配置文件内容

 db.driver=oracle.jdbc.OracleDriver db.url=jdbc:oracle:thin:@10.18.20.180:1521:MUDATA db.username=MD_REF db.password=MD_REF_2018

rmq.host=10.18.20.13 rmq.port=5672 rmq.username=camel rmq.password=camel123 rmq.vhost=reference rmq.exchanges=ref.muservice.input rmq.queue.airport=two.airport.muservice.input rmq.queue.city=two.city.muservice.input rmq.queue.country=two.country.muservice.input

读取RabbitMQ

 import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.rabbitmq.RMQSource; import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig;

public class CountryFlinkMain { public static void main(String[] args) throws Exception { // 1,执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// 2,读取 country.properties 配置

ParameterTool pt=ParameterTool.fromPropertiesFile("flink-crew-assign/src/main/resources/country.properties");

// 3,RabbitMQ配置

RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()

.setHost(pt.get("rmq.host"))

.setPort(Integer.parseInt(pt.get("rmq.port")))

.setUserName(pt.get("rmq.username"))

.setPassword(pt.get("rmq.password"))

.setVirtualHost(pt.get("rmq.vhost"))

.build();

// 4,添加资源,RMQSource(OUT)

DataStreamSource dataStreamSource = env.addSource(new RMQSource(

connectionConfig,

pt.get("rmq.queue.country"),// 国家

true,

new SimpleStringSchema()));

// 5,添加到流,去执行接收到的数据进行入库,addSink(IN)

dataStreamSource.addSink(new CountrySinkOracle());

// 6,执行工作,定义一个工作名称

env.execute("rabbitmq flink oracle");

}

}

读取数据库

 public class CountrySinkOracle extends RichSinkFunction { private Connection conn; private PreparedStatement statement;

// 1,初始化

@Override

public void open(Configuration parameters) throws Exception

{

super.open(parameters);

ParameterTool pt = ParameterTool.fromPropertiesFile("flink-crew-assign/src/main/resources/country.properties");

Class.forName(pt.get("db.driver"));

conn = DriverManager.getConnection(pt.get("db.url"), pt.get("db.username"), pt.get("db.password"));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Flink的JDBC Connector来读取Oracle数据库中的数据。以下是一个简单的示例,演示如何使用Flink读取Oracle数据库中的内容: 1. 在项目的pom.xml文件中,添加以下依赖项: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_2.12</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency> ``` 2. 在Flink作业中,创建一个JDBCInputFormat对象,并使用该对象来读取Oracle数据库中的数据。以下是一个示例: ```java import org.apache.flink.api.java.io.jdbc.JDBCInputFormat; import org.apache.flink.api.java.typeutils.RowTypeInfo; import org.apache.flink.types.Row; // 创建用于连接Oracle数据库的JDBC连接字符串 String jdbcURL = "jdbc:oracle:thin:@//localhost:1521/ORCLCDB"; String username = "username"; String password = "password"; // 创建要读取的表的名称 String tableName = "table_name"; // 创建要读取的列的名称 String[] fieldNames = {"column1", "column2", "column3"}; // 创建一个RowTypeInfo对象,指定要读取的列的类型 RowTypeInfo rowTypeInfo = new RowTypeInfo(Types.STRING, Types.INT, Types.DOUBLE); // 创建JDBCInputFormat对象 JDBCInputFormat inputFormat = JDBCInputFormat.buildJDBCInputFormat() .setDrivername("oracle.jdbc.driver.OracleDriver") .setDBUrl(jdbcURL) .setUsername(username) .setPassword(password) .setQuery("SELECT column1, column2, column3 FROM " + tableName) .setRowTypeInfo(rowTypeInfo) .finish(); // 使用inputFormat对象读取数据 DataSet<Row> data = env.createInput(inputFormat); ``` 3. 在上面的示例中,我们使用了`JDBCInputFormat.buildJDBCInputFormat()`方法来创建一个JDBCInputFormat对象,并指定了要读取的表的名称、要读取的列的名称、要读取的列的类型等参数。在`setQuery()`方法中,我们指定了要执行的SQL查询,该查询将返回指定的列中的所有行。 4. 最后,我们使用`env.createInput(inputFormat)`方法将inputFormat对象传递给Flink的执行环境,并使用`data`变量来保存读取数据。 以上就是使用Flink读取Oracle数据库中的数据的基本步骤。您可以根据自己的需求进行修改和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值