我有一个Java Beam Streaming应用程序,已将其部署到数据流中。我正在使用ElasticsearchIO将数据输出到Elasticsearch实例。我的应用程序依赖于其他Java类,它们与运行管道的主应用程序位于同一目录中。我的主应用程序实例化了这些类,到目前为止,由于该应用程序可以在数据流上正确运行,并且可以将数据输出到我的Elasticsearch数据库中,因此可以正常工作。我已经使用maven进行了部署,现在我的应用程序需要指定pem文件的路径。为了使应用程序能够做到这一点,它必须存在于数据流运行器中。我现在唯一的问题是获取数据流来上传文件,以便运行程序中的代码引用它。
下面是我试图让跑步者访问文件的一些东西。
我尝试的第一件事是在/ src / main / resources中创建一个资源文件夹,并将文件放置在该文件夹中。然后,我使用getresource()加载文件。这没有用。我在GCP中使用ssh'd进入了数据流运行程序,但是找不到系统上任何位置的文件。另外,我的应用程序未向Elasticsearch输出任何数据,因此我知道它无法正常运行。
我发现代码的目录路径在类路径中,并且我认为类路径中的任何文件都将上载到数据流运行程序,因此我将文件放置在代码所处的目录中。我将其部署到数据流中,日志中没有错误,但是我的应用程序不再将数据输出到elasticsearch。
然后,我了解了filestostage管道选项。当我指定文件的路径时,文件上传到我的暂存位置,但文件名不同,文件名后面附加了哈希值。最重要的是,我的应用程序未将数据输出到elasticsearch。
我认为这是由于跑步者无法再访问我的Java类,所以我的主应用程序无法访问它们。因此,我通过在stage to文件中指定每个文件的路径(java类和文件)来包含所有文件。我看到它们已上传到我的暂存位置,但看来我的主应用程序仍然无法从它们创建对象或读取pem文件。
然后,我将该文件放在与Java类相同的目录中,并在要暂存的文件选项中指定该目录。该目录以jar形式上传到我的暂存位置,但该应用程序仍未输出到elasticsearch。
longitude
有人知道我如何让跑步者访问/key.p12吗? 我觉得因为filetostage确实会将文件上传到运行程序(即使它们放置在运行程序文件系统的晦涩区域中,并且文件名也已更改),也许这是我最好的选择。但是如何获取我的主要Java类,然后实例化这些上载的类中的对象?