博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

练习 : 自定义sink mysql hbase

 

mysql

 1 package sink;
 2 
 3 //import com.util.Propss;
 4 //import com.bean.Sku;
 5 import org.apache.flink.configuration.Configuration;
 6 import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
 7 import org.apache.kafka.clients.producer.KafkaProducer;
 8 import org.apache.kafka.clients.producer.ProducerRecord;
 9 
10 import java.lang.reflect.Field;
11 import java.sql.*;
12 
13 /**
14  * @Description:
15  * @Author: liuyuan
16  * @Times : 2021/9/24 20:09
17  */
18 
19 //自定义SINK RichSinkFuncation
20 public class MySQLSink extends RichSinkFunction<String> {
21     private static Connection conn;
22     private static PreparedStatement pre;
23 
24     private static String database;
25     private static String sql;
26     private static Class T;
27 
28     public MySQLSink(String database,String sql,Class T){
29         this.database=database;
30         this.sql=sql;
31         this.T=T;
32     }
33 
34     @Override
35     public void open(Configuration parameters) throws Exception {
36         Class.forName("com.mysql.jdbc.Driver");
37         conn = DriverManager.getConnection("jdbc:mysql://hadoop106:3306/"+database, "root", "root");
38         conn.setAutoCommit(true);
39     }
40 
41     @Override
42     public void invoke(String value, Context context) throws Exception {
43         String[] split = value.split(",");
44         Field[] declaredFields = T.getDeclaredFields();
45         pre = conn.prepareStatement(sql);
46         for (int i = 0; i < declaredFields.length; i++) {
47             if(declaredFields[i].getType().toString().equals("class java.lang.String")){
48                 pre.setString((i+1),split[i]);
49             }
50             if(declaredFields[i].getType().toString().equals("class java.lang.Integer")){
51                 pre.setInt((i+1),Integer.valueOf(split[i]));
52             }
53             if(declaredFields[i].getType().toString().equals("class java.lang.Double")){
54                 pre.setDouble((i+1),Double.valueOf(split[i]));
55             }
56             if(declaredFields[i].getType().toString().equals("class java.lang.Long")){
57                 pre.setLong((i+1),Long.valueOf(split[i]));
58             }
59         }
60         pre.execute();
61     }
62 
63     @Override
64     public void close() throws Exception {
65         pre.close();
66         conn.close();
67 
68     }
69 }

方法二

stream. addsink (dbcSink.sink(
"INSERT INTO clicks (user, ur1)VALUES (? , ?)",
((statement,event) ->{ statement.setString( parameterlndex: 1,event.user);
statement.setstring( parameterlndex: 2,event.ur1);
}),
new JdbcConnectionoptions.JdbcConnectionoptionsBuilder()
.withUrl( "jdbc :mysql://localhost: 3306/test") .withDriverName( "com.mysq1.jdbc.Driver")
.withUsername("root") .withPassword( "root")
.build() ));
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId>
<version>${flink.version)</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId><version>5.1.47</version>
</dependency>

 

posted @ 2022-04-08 21:29  CHANG_09  阅读(58)  评论(0)    收藏  举报