flink接入spring体系

背景

flink由于是job-manager加task-manager的结构,接入spring时需要有一些注意事项,本文列举一下关键点

关键事项

注意的是SpringApplicationContext要保证进程单例, 不要在算子的open()方法中创建SpringApplicationContext, 否则在并行执行算子时会导致重复创建SpringApplicationContext,并行执行算子对于flink来说可以是单进程中每个线程执行不同的算子,达到并行的目的,这种就会导致重复创建的问题,当然也可能不同的进程执行不同的算子,这种情况就没有问题

具体事项

1.创建一个静态spring容器的静态类

public SpringApplicationHelper {

复制代码
private static volatile ApplicationContext applicationContext;

public static ApplicationContext getApplicationContext() {
	if (applicationContext == null) {
		synchronized (SpringApplicationHelper.class) {
			if (applicationContext == null) {
				applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
			}
		}
	}
	return applicationContext;
}

}

2.在每个算子的入口类open方法中获取bean对象,例如SinkFunction里面

public void open(Configuration parameters) throws Exception {

ApplicationContext applicationContext = SpringApplicationHelper.getApplicationContext();

cityMapper = applicationContext.getBean("cityDao", CityMapper.class);

}

相关推荐
yuzhiboyouye1 分钟前
XML写接口适用场景举例
java·服务器·前端
今天的接口写完了吗?5 分钟前
Java 使用 OkHttp 调用外部接口
java
yuzhiboyouye19 分钟前
零sql和xml写接口,的区别是什么,过程是什么,举例一下下,用mybatis-plus+ spring-boot
java·服务器·前端
小王师傅6640 分钟前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
nvvas1 小时前
Spring AI 2.0正式GA:Token砍掉64%,Java的AI反击战打响了
java·人工智能
Msshu1231 小时前
什么是PD快充诱骗取电芯片,PD快充取电芯片如何选型
flink·rabbitmq·ambari·mariadb·storm·talkingdata
程序员阿鹏1 小时前
双亲委派机制
java·jvm·数据结构·后端
步行cgn2 小时前
Spring Bean 的生命周期详解
java·后端·spring
ps酷教程2 小时前
数据权限DataPersmission
java·学习
驭渊的小故事2 小时前
Java 项目-jckson序列化工具
java·开发语言