如何在flink环境下初始化flink作业的spring资源
作者:互联网
我最近遇到了一些关于开发flink作业的问题,这些问题引入了spring和hibernate,而且这个工作将在flink集群上运行.所以我需要在任务管理器而不是作业管理器上运行flink操作符之前初始化spring资源.但是我找不到任何合适的StreamExecutionEnvironment方法来做到这一点.
我尝试了下面这样的方法:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
// etl business logic as flink operators
FlinkOperators.run();
env.execute();
但是,当执行并行性多于一的flink作业时,弹出初始化将不在每个任务管理器进程中.所以我不能在眨眼工作中使用弹簧.
有什么方法可以在flink作业上初始化spring资源吗?
谢谢.
最好的祝福.
阿尔文
解决方法:
每次需要为每个任务管理器进行某种上下文初始化时,构建一个静态函数(如果使用scala,则在对象内部的函数),将这些初始化值存储在静态变量中.
这应该足够了,因为静态值存储在每个任务管理器的内存中.
我使用这个方法在每个任务管理器中加载属性文件,这些属性文件包含每个作业配置.如果要加载文件,请检查每个任务管理器是否包含要加载的文件的副本.
标签:spring,apache-flink 来源: https://codeday.me/bug/20190711/1429309.html