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);

}

相关推荐
Sarvartha2 小时前
final 关键字
java·开发语言
2601_952047792 小时前
单一策略深度教程:用轻易云把集成任务的报错实时推送到钉钉机器人
java·机器人·钉钉
Joy T2 小时前
Spring AI 项目中的 pom.xml、application.yml 与 Nacos:从依赖管理到运行配置
spring·nacos·pom.xml·profile·参数配置·application.yml
数据狐(Datafox)3 小时前
淘宝图片搜索 API 落地实战:基于以图搜货搭建跨境电商选品系统
java·大数据·微服务
Escalating_xu4 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
灯澜忆梦5 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
一个风轻云淡5 小时前
GCC 和 GDB命令简单解读
java·linux·前端
省钱兄--zs5 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析