Spring 与 Apache Beam

2024-05-23

我想将 Spring 与 Apache Beam 结合使用,它将在 Google Cloud Data flow Runner 上运行。数据流作业应该能够在执行管道步骤时使用 Spring 运行时应用程序上下文。我想在 Apache Beam 管道中使用 Spring 功能来实现 DI 和其他功能。在 google 上浏览了几个小时后,我找不到任何显示 Apache Beam 中 Spring 集成的帖子或文档。所以,如果有人用 Apache Beam 尝试过 Spring,请告诉我。

在主类中,我已经初始化了 spring 应用程序上下文,但在执行管道步骤时它不可用。我收到自动装配 bean 的空指针异常。我想问题是,在运行时上下文对工作线程不可用。

 public static void main(String[] args) {
    initSpringApplicationContext();

    GcmOptions options = PipelineOptionsFactory.fromArgs(args)
        .withValidation()
        .as(GcmOptions.class);
    Pipeline pipeline = Pipeline.create(options);
    // pipeline definition
}

我想将 spring 应用程序上下文注入到每个 ParDo 函数中。


这里的问题是 ApplicationContext 在任何工作线程上都不可用,因为main方法仅在构造作业时调用,而不是在任何工作机器上调用。所以,initSpringApplicationContext从未召唤过任何工人。

我从未尝试过在 Apache Beam 中使用 Spring,但我想移动initSpringApplicationContext在静态初始化块中将导致您的预期结果。

public class ApplicationContextHolder {

    private static final ApplicationContext CTX;

    static {
        CTX = initApplicationContext();
    }

    public static ApplicationContext getContext() {
        return CTX;
    }
}

请注意,这不应被视为在 Apache Beam 中使用 Spring 的最佳实践,因为它不能很好地集成到 Apache Beam 的生命周期中。例如,当应用程序上下文初始化期间发生错误时,它会出现在应用程序上下文的第一个位置。ApplicationContextHolder用来。因此,我建议提取initApplicationContext脱离静态初始化程序块并根据 Apache Beam 的生命周期显式调用它。这setup https://beam.apache.org/releases/javadoc/2.13.0/org/apache/beam/sdk/transforms/DoFn.Setup.html阶段将是一个好地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 与 Apache Beam 的相关文章

随机推荐

  • 如何删除字符串中某个字符之后的所有内容?

    如何删除Python中字符串的某个字符之后的所有内容 例如 我有一个包含文件路径和一些额外字符的字符串 如何删除 zip 后的所有内容 我试过了rsplit and split 但在删除多余字符时都不包含 zip 有什么建议么 只需取出拆分
  • TypeScript 假定任何键都保证存在于记录中

    这是一些代码 declare const foo Record
  • 使用正则表达式定位响铃字符

    我注意到 Bell 有一个正则表达式字符 我却无法匹配 我读到了这个角色的内容维基百科 http en wikipedia org wiki Bell character 但我不明白如何在正则表达式中找到它
  • kdb+ 32bit 的性能表现如何

    Kx 宣布 http kx com press releases 140402 php their 免费 kdb http www kxcommunity com 32位 时间序列数据库 我们通常可以期望该数据库的每秒读 写性能如何 我确实
  • Python - UnicodeDecodeError:“charmap”编解码器无法解码位置 44 中的字节 0x81:字符映射到 <未定义>

    在 Python 3 Jupyter 笔记本上使用 pandas 我得到了 UnicodeDecodeError charmap 编解码器无法解码字节 0x81 位置 44 字符映射到 尝试读取如下所示的 json 文件时出错 Test1
  • Windows批处理脚本启动程序并退出控制台

    我有一个用于启动程序的批处理脚本 例如notepad exe 当我双击这个批处理文件时 记事本正常启动 但是黑窗cmd谁发起的notepad exe仍然在后台 我需要做什么才能启动notepad exe并使cmd窗口消失 edit 比使用更
  • Scala 如何使用我的所有核心?

    object PrefixScan sealed abstract class Tree A case class Leaf A a A extends Tree A case class Node A l Tree A r Tree A
  • Spring Boot Oauth2 资源服务器 UserDetailsS​​ervice

    尝试让 UserDetailsS ervice 为我设置的 oauth2 资源服务器工作 我能够成功验证 jwt 但我似乎没有做任何事情来让它调用 loadUserByUsername 方法 最初使用 SAML 并且它可以工作 但现在我已经
  • EMBER直接路由URL访问不加载数据

    当我直接从浏览器访问我的网址时遇到问题 它不会加载我的单一帖子信息 示例 index html posts 10052308 但当我访问 index html posts 然后单击我的一篇文章时 它会起作用 我的网址会更改为 index h
  • Linux 上的基准测试程序

    对于一项任务 我们需要使用不同的优化和参数来对我们的实现进行基准测试 有没有一种可行的方法可以在Linux命令行 我知道时间 上使用不同的参数对小程序进行基准测试 从而为我提供CSV或类似内容的时间数据 输出可能类似于 Implementa
  • ggplot2中的两列分组

    是否可以按两列分组 于是叉积就画出来了 经过geom point and geom smooth 例如 frame lt data frame series lt rep c a b 6 sample lt rep c glass wate
  • 如何使用反应导航在导航抽屉中添加部分分隔符

    假设我的抽屉导航中有五个项目 我想在三个项目之后添加分隔符 如何使用反应导航添加它 正如提到的 vonovak 你可以通过使用来实现这一点contentComponent允许完全定制抽屉 为此 您需要创建自定义组件来覆盖默认抽屉 代码示例
  • 确定哪个元素具有焦点[重复]

    这个问题在这里已经有答案了 可能的重复 如何判断html页面的哪个元素获得焦点 https stackoverflow com questions 483741 how to determine which html page elemen
  • 何时从容器管理的安全性转向 Apache Shiro、Spring Security 等替代方案?

    我正在尝试保护使用 JSF2 0 构建的应用程序的安全 我很困惑人们什么时候会选择使用 Shiro Spring Security 或 owasp 的 esapi 等安全替代方案 而放弃容器管理的安全性 看过一些相关问题 https sta
  • 使用卡尔曼滤波器跟踪位置和速度

    我正在使用卡尔曼滤波器 恒定速度模型 来跟踪物体的位置和速度 我测量对象的 x y 并跟踪 x y vx vy 这是有效的 但是如果在传感器读数 x y vx vy 上添加 20 mm 的高斯噪声 即使该点没有移动 只是噪声也会发生波动 对
  • 找到 4 个特定的角像素并将它们与扭曲透视一起使用

    我正在使用 OpenCV 我想知道如何构建一个简单版本的透视变换程序 我有一张平行四边形的图像 它的每个角都由具有特定颜色的像素组成 该像素在图像中没有其他位置 我想遍历所有像素并找到这 4 个像素 然后我想将它们用作新图像中的角点 以扭曲
  • 如何在 Powershell 中设置低 I/O(“后台”)优先级

    There s 这个powershell脚本 https stackoverflow com a 4302 1266650它可以将进程的优先级从 空闲 设置为 实时 但某些工具提供另一个优先级 该优先级甚至会降低进程的优先级 如何在 Pow
  • 如何使用 C# 中的 Caliburn.Micro 从 ListView 获取选定的项目和事件?

    我使用 Caliburn Micro 库用 MVVM C 和 XAML 编写了一个程序 我怎样才能 get all选定的项目 不仅是一项 获取选定的更改事件 通过单击标题列对项目进行排序 任何帮助 将不胜感激 图形用户界面代码 视图 Mai
  • 使用 Maven 创建 tar.gz 存档

    我有一个 Maven 项目 在 src main 目录下有一个名为 output 的子目录 该文件夹需要打包成tar gz 使用程序集插件时如下 来自 pom xml
  • Spring 与 Apache Beam

    我想将 Spring 与 Apache Beam 结合使用 它将在 Google Cloud Data flow Runner 上运行 数据流作业应该能够在执行管道步骤时使用 Spring 运行时应用程序上下文 我想在 Apache Bea