flinksql自定义mysql sink

本文介绍了如何在Flink SQL中自定义MySQL Sink,解决连接Docker MySQL集群时遇到的SSL认证关闭和Maven版本升级问题,以解决caching_sha2_password错误。
摘要由CSDN通过智能技术生成

因为我接下去想尝试搭建基于docker的mysql集群,因此连接的docker版本的mysql,出了几个小问题,一个是关闭ssl认证,一个修改mavn版本提升到8.0.11 否则会报caching_sha2_password 的错误

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.11</version>
</dependency>

回归正题,自定义jdbcsink难度不大,核心代码如下

class MyJdbcSinkFunc() extends RichSinkFunction[item_count]{
   
  // 定义连接、预编译语句
  var conn: Connection = _
  var insertStmt: PreparedStatement = _
  var updateStmt: PreparedStatement = _
  var count = 0

  override def open(parameters: Configuration): Unit = {
   
    Class.forName("com.mysql.jdbc.Driver")
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3309/alibaba?characterEncoding=utf8&useSSL=false", "root", "root")
    insertStmt = conn.prepareStatement("insert into Item_detail (item_id,cate_id,price,sale_count,save_count) values (?, ?,?,?,?)")
    updateStmt = conn.prepareStatement("update Item_detail set sale_count =sale_count +1  where item_id = ?")
  }

  override def invoke(value: item_count): Unit = {
   
    // 先执行更新操作,查到就更新
    updateStmt.setLong(1, value.item_id)
    updateStmt.execute()


    // 如果更新没有查到数据,那么就插入
    if( updateStmt.getUpdateCount == 0 ){
   
      insertStmt.setLong(1, value.item_id)
      insertStmt.setLong(2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值