由于我知道如何在Google Dataflow作业中运行Apache Beam,我应该首先为我的json凭据文件设置一个环境变量
set GOOGLE_APPLICATION_CREDENTIALS=/path/to/jsonfile.json
我想自动化这一点,我想我必须首先运行一个bash脚本由我的java光束应用程序。在我的光束Java类中有没有更好的方法来做到这一点?
是的,有一种方法可以从Java应用程序加载Json凭据文件。
请参考下面的代码片段创建Pipeline对象,并以编程方式加载Google凭据引用。
//create scope list with DataFlow's scopes
Set<String> scopeList = new HashSet<String>();
scopeList.addAll(DataflowScopes.all());
//create GoogleCredentials object with Json credential file & the scope collection prepared above
GoogleCredentials credential = GoogleCredentials
.fromStream(new FileInputStream("path-to-credential-json-file"))
.createScoped(scopeList);
//create default pipeline
PipelineOptions options = PipelineOptionsFactory.create();
//assign the credential
options.as(GcpOptions.class).setGcpCredential( credential);
Pipeline pipeLine = Pipeline.create(options);
这种方法可以帮助您不依赖GOOGLE_APPLICATION_CREDENTIALS环境变量。
它在我的环境中起作用,如果您遇到任何问题,请告诉我。
据我所知,你不能轻易修改执行程序的环境变量。也就是说,你不能从启动管道的主程序中做到这一点。在脚本中设置它是这里最好的选择。
替代品是类似于https://blog.sebastian-daschner.com/entries/changing_env_java黑客,我不建议使用这些。