iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >flink 流式处理中如何集成mybatis框架
  • 310
分享到

flink 流式处理中如何集成mybatis框架

flink流式处理中如何集成mybatis框架 2019-08-15 23:08:53 310人浏览 无得
摘要

flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且对数据库事务的控制比较死板,有时候操作关

flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且对数据库事务的控制比较死板,有时候操作关系型数据库我们会非常怀念在JAVA WEB应用开发中的非常优秀的mybatis框架,那么其实flink中是可以自己集成mybatis进来的。 我们这里以flink 1.9版本为例来进行集成。

如下图为flink内部自带的flink-jdbc:

 

创建一个flink的流式处理项目,引入flink的Maven依赖和mybatis依赖(注意这里引入的是非spring版本,也就是mybatis的单机版):



1.9.0



    org.mybatis
    mybatis
    3.5.2



    org.apache.flink
    flink-streaming-java_2.11
    ${flink.version}

maven依赖引入以后,那么需要在resources下面定义mybatis-config.xml 配置:

mybatis-config.xml 需要定义如下配置:




    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
        
    

typeAlias 标签中为自定义的数据类型,然后在xxxxxMapper.xml 中parameterType或者resultType就可以直接用这种定义的数据类型。

下面为定义的mybatis 的xxxxxMapper文件。里面放置的都是sql语句。

本文作者张永清,转载请注明出处:flink 流式处理中如何集成mybatis框架

xxxxxMapper.xml 中的sql示例:




    
    
        SELECT id AS id,
        USER_NAME AS userName,
        APPL_IDCARD AS applIdCard,
        PEER_USER AS peerUser,
        RELA_TYPE AS relaType,
        CREATE_USER AS createUser,
        CREATE_TIME AS createTime
        FROM USER_RELA_INFO
        
            
                APPL_IDCARD=#{applIdCard}
            
            
            AND PEER_USER=#{peerUser}
            
        
    

 定义Mapper,一般可以定义一个interface ,和xxxxxMapper.xml中的namespace保持一致

注意传入的参数一般加上@Param 注解,传入的参数和xxxxxMapper.xml中需要的参数保持一致

public interface UserRelainfoMapper {
    List queryUserRelaInfo(@Param("applIdCard")String applIdCard,@Param("peerUser") String peerUser);
}

定义SessionFactory工厂(单例模式):


public class MybatisSessionFactory {
    private static final Logger LOG = LoggerFactory.getLogger(MybatisSessionFactory.class);
    private static SqlSessionFactory sqlSessionFactory;
    private MybatisSessionFactory(){
        super();
    }
    public synchronized static SqlSessionFactory getSqlSessionFactory(){
        if(null==sqlSessionFactory){
            InputStream inputStream=null;
            try{
                inputStream = MybatisSessionFactory.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }
            catch (Exception e){
                LOG.error("create MybatisSessionFactory read mybatis-config.xml cause Exception",e);
            }
            if(null!=sqlSessionFactory){
                LOG.info("get Mybatis sqlsession sucessed....");
            }
            else {
                LOG.info("get Mybatis sqlsession failed....");
            }
        }
        return sqlSessionFactory;
    }
}

  

使用mybatis 对数据库进行操作:

        SqlSession sqlSession = MybatisSessionFactory.getSqlSessionFactory().openSession();
        UserRelaInfoMapper  userRelaInfoMapper  = sqlSession.getMapper(UserRelaInfoMapper .class);
		//调用对应的方法
		userRelaInfoMapper.xxxx();
		//提交事务
		sqlSession.commit();
		//回滚事务,一般可以捕获异常,在发生Exception的时候,事务进行回滚
		sqlSession.rollback();
		
		
		

这里以mysql为示例,写一个flink下mysql的sink示例,可以自己来灵活控制事务的提交:

public class MysqlSinkFunction extends RichSinkFunction {
    private static final Logger LOG = LoggerFactory.getLogger(mysqlSinkFunction.class);
    @Override
    public void invoke(Object value, Context context) throws Exception{
        SqlSession sqlSession = MybatisSessionFactory.getSqlSessionFactory().openSession();
        try{
                            //插入
                            LOG.info("MysqlSinkFunction start to do insert data...");
                            xxx.xxx();
							//更新
                            LOG.info("MysqlSinkFunction start to do update data...");
							xxx.xxx();
                            //删除
                            LOG.info("MysqlSinkFunction start to do delete data...");
							xxx.xxx();

                    
                
                sqlSession.commit();
                LOG.info("MysqlSinkFunction commit transaction success...");
        }
        catch (Throwable e){
            sqlSession.rollback();
            LOG.error("MysqlSinkFunction cause Exception,sqlSession transaction rollback...",e);
        }
    }
}  
相信您如果以前在spring中用过mybatis的话,对上面的这些操作一定不会陌生。由此你也可以发现,在大数据中可以完美的集成mybatis,这样可以发挥mybatis框架对数据库操作的优势,使用起来也非常简单方便。
一旦集成了mybaitis后,在flink中就可以方便的对各种各样的关系型数据库进行操作了。

本文作者张永清,转载请注明出处:flink 流式处理中如何集成mybatis框架
您可能感兴趣的文档:

--结束END--

本文标题: flink 流式处理中如何集成mybatis框架

本文链接: https://www.lsjlt.com/news/2394.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • flink 流式处理中如何集成mybatis框架
    flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且对数据库事务的控制比较死板,有时候操作关...
    99+
    2019-08-15
    flink 流式处理中如何集成mybatis框架
  • Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
    根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快。 从技术上讲,这意味着我们的大数据处理将变得更加复杂且更...
    99+
    2017-10-13
    Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
  • Springboot中如何集成Swagger2框架
    这篇文章给大家分享的是有关Springboot中如何集成Swagger2框架的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。摘要:在项目开发中,往往期望做到前后端分离,也就是后端开发人员往往需要输出大量的服务接口,...
    99+
    2023-05-30
    spring boot swagger2
  • 如何在 Spring 框架中集成自然语言处理功能?
    Spring 框架是一个流行的 Java 开发框架,它提供了一种方便的方式来开发企业级应用程序。在今天的商业环境中,自然语言处理(NLP)是一个关键的技术,它可以帮助企业在处理和分析大量文本数据时更加高效。本文将介绍如何在 Spring 框...
    99+
    2023-10-08
    框架 自然语言处理 spring
  • 你知道如何在Spring框架中集成自然语言处理吗?
    Spring框架是目前最为流行的Java开源框架之一,它提供了丰富的功能和易于使用的API,能够帮助开发者快速构建高效的应用程序。在这篇文章中,我们将介绍如何在Spring框架中集成自然语言处理,以便能够更好地处理文本数据。 首先,我们需要...
    99+
    2023-08-01
    linux 自然语言处理 spring
  • 二维码生成器与数组处理在GO框架中的集成方式是什么?
    在GO框架中,二维码生成器和数组处理是非常常见的功能。它们的集成方式也非常简单,只需要使用GO语言提供的相关库和函数即可轻松实现。 首先,我们来看二维码生成器的集成方式。GO语言中有一个非常流行的二维码生成器库,就是"qrcode"。这个库...
    99+
    2023-06-22
    框架 二维码 数组
  • Angular中如何集成三方UI框架、控件
    这篇文章将为大家详细讲解有关Angular中如何集成三方UI框架、控件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:安装 Material UI 方法:Mate...
    99+
    2022-10-19
  • 如何在PHP和Unix的框架中集成Spring?
    随着互联网技术的不断发展,越来越多的企业和开发者开始选择使用Spring框架来构建他们的应用程序。Spring框架具有很多优点,比如灵活性、可扩展性、模块化等,因此在开发Web应用程序时,它是一个非常好的选择。但是,对于那些已经使用PHP...
    99+
    2023-09-04
    unix 框架 spring
  • 如何在 ASP 框架中集成 JavaScript 二维码生成器?
    ASP框架是一种广泛应用的Web开发框架,而JavaScript二维码生成器则是一种非常实用的工具。在开发Web应用时,有时需要在页面中生成二维码,这时就需要将二维码生成器集成到ASP框架中。本文将介绍如何在ASP框架中集成JavaScri...
    99+
    2023-09-05
    框架 javascript 二维码
  • 如何在Go语言项目中集成Spring框架?
    在Go语言开发中,我们常常需要使用Spring框架来提供一些便捷的功能,比如依赖注入、AOP等。但是,由于Spring框架是基于Java语言的,因此在Go语言项目中集成Spring框架是一件比较困难的事情。本文将介绍如何在Go语言项目中集成...
    99+
    2023-11-05
    spring 框架 函数
  • Laravel框架中如何处理数组数据?
    Laravel是一个流行的PHP框架,它提供了许多功能和工具,以便开发者更方便地构建Web应用程序。在Laravel中,数组是最常用的数据类型之一,因此了解如何处理数组数据是非常重要的。 定义数组 在Laravel中,定义一个数组非常简...
    99+
    2023-10-17
    数组 laravel spring
  • Spring 框架中如何处理数组数据?
    Spring 框架是一个非常流行的 Java 开发框架,它提供了很多有用的工具和类库来帮助开发人员快速构建可靠的应用程序。在 Spring 框架中,处理数组数据是一个非常常见的任务。本文将介绍 Spring 框架中处理数组数据的方法。 声...
    99+
    2023-08-02
    编程算法 spring 数组
  • Java和NumPy框架API:如何在你的项目中集成它们?
    Java和NumPy框架都是广泛使用的编程工具,它们都有着各自独特的优势和应用场景。Java是一种非常流行的编程语言,广泛应用于企业级应用程序的开发。而NumPy框架是Python语言中最广泛使用的数值计算库,它提供了许多数学函数和数组操...
    99+
    2023-07-26
    numpy 框架 api
  • 如何在Java项目中快速集成二维码响应框架?
    二维码作为一种快速传递信息的工具,已经被广泛应用于各个领域。在Java开发中,我们也常常需要在项目中快速集成二维码响应框架,以便于实现二维码的生成和识别。本文将介绍如何在Java项目中快速集成二维码响应框架,并附上演示代码供参考。 一、二...
    99+
    2023-06-13
    二维码 响应 框架
  • 微服务架构中如何处理服务的迭代和持续集成?
    随着互联网技术的快速发展,微服务架构已经成为了一种趋势。微服务架构将应用程序拆分成多个小型服务,每个服务独立部署、独立维护、独立扩展,最终组合成一个完整的应用程序。这种架构形式的出现,一方面解耦了应用,另一方面也带来了新的挑战。其中,服务迭...
    99+
    2023-05-16
    持续集成 微服务架构 服务迭代
  • Python 分布式框架如何优化文件处理效率?
    在现代计算机系统中,大量的数据需要通过文件进行存储和传输。因此,文件处理的效率成为了计算机系统中一个非常关键的问题。为了解决这个问题,我们可以利用分布式框架来优化文件处理效率。本文将介绍Python分布式框架的基本概念以及如何使用它来优化...
    99+
    2023-10-14
    分布式 框架 文件
  • 如何在 Laravel 框架中集成 ASP 文件以提高开发效率?
    Laravel 是一个非常流行的 PHP 框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发 Web 应用程序。不过,有时候我们需要使用一些 ASP 文件来完成一些任务,那么在 Laravel 中如何集成 ASP 文件呢?本文...
    99+
    2023-09-01
    文件 laravel 框架
  • 如何在Spring框架中集成JavaScript,以实现更好的API性能?
    Spring框架是一个非常流行的Java企业级应用程序框架,它提供了很多不同的功能和工具来帮助开发人员构建高质量的应用程序。当涉及到API性能优化时,JavaScript是一个重要的工具。在本文中,我们将探讨如何在Spring框架中集成Ja...
    99+
    2023-08-10
    spring api javascript
  • Go框架和NumPy打包:如何优化您的数据处理流程?
    数据处理是现代计算机科学中不可或缺的一部分。从数字图像处理到金融分析,数据处理的应用广泛,因此,高效的数据处理流程对于许多领域都至关重要。在本文中,我们将介绍如何使用Go框架和NumPy打包来优化您的数据处理流程。 Go是一种高效的编程语...
    99+
    2023-09-20
    框架 numpy 打包
  • 如何在Laravel框架中处理响应数据?
    Laravel框架是一个流行的PHP框架,它提供了许多有用的功能,其中之一是处理响应数据。在本文中,我们将讨论如何在Laravel框架中处理响应数据。 一、返回字符串数据 在Laravel框架中,你可以通过简单的返回字符串来处理响应数据。这...
    99+
    2023-09-11
    编程算法 laravel 响应
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作