当前位置: 首页 > 知识库问答 >
问题:

Spring boot-从jar内部访问firebase admin sdk凭据json文件

澹台臻
2023-03-14

我有一个Java Spring Boot后端应用程序,它使用Firebase Admin SDK。在FirebaseConfig的init方法中,我必须提供FirebaseOptions的凭据文件,

@PostConstruct
public void init() throws IOException {
    ClassLoader classLoader=Thread.currentThread().getContextClassLoader();
    FileInputStream refreshToken = new FileInputStream("src/main/resources/progresee-fa969-firebase-adminsdk-3vip2-d80bf340b7.json");
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(GoogleCredentials.fromStream(refreshToken))
        .setDatabaseUrl(dbUrl)
        .build();
    FirebaseApp.initializeApp(options);
}

当我在本地运行时,一切都很好,但是当我构建jar文件并上传到服务器托管服务(AWS)时,我得到一个FileNot找到错误-

Caused by: java.io.FileNotFoundException: /progresee-fa969-firebase-adminsdk-3vip2-d80bf340b7.json (No such file or directory)
at java.io.FileInputStream.open0(Native Method) ~[na:1.8.0_222]
at java.io.FileInputStream.open(FileInputStream.java:195) ~[na:1.8.0_222]
at java.io.FileInputStream.<init>(FileInputStream.java:138) ~[na:1.8.0_222]
at java.io.FileInputStream.<init>(FileInputStream.java:93) ~[na:1.8.0_222]
at com.progresee.app.firebase.FirebaseConfig.init(FirebaseConfig.java:55) ~[classes!/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_222]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_222]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_222]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_222]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ~[spring-beans-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
... 74 common frames omitted

我试图将文件上传到s3 bucket或firebase,并通过URL访问它,但这种方式在本地甚至不起作用。

陈,先谢谢你。

共有1个答案

颜森
2023-03-14

要在胖罐子中添加JSON配置,请遵循以下步骤。

>

  • 将JSON文件放入src/main/Resources

    将资源加载器注入服务

    @Autowired
    ResourceLoader resourceLoader;
    

    获取资源的inputstream,而不是获取文件

    Resource resource = resourceLoader.getResource("classpath:firebaseFile.json");    
    InputStream inputStream = resource.getInputStream();
    

    在firebase选项中传递inputstream

  •  类似资料:
    • 我正在尝试将java项目构建为一个jar文件,它需要google凭据才能运行。 运行此命令时: 我收到这个错误: 我按如下方式存储凭据的路径: 我使用此方法从资源文件夹检索凭据: 我不明白我需要做什么来避免这个错误。任何帮助都将不胜感激。

    • 我必须通过 JAR 项目提供静态.js文件。为此,我创建了一个 JAR(使用 MAVEN),如下所示: 现在,我将此 JAR 添加到我的父级Spring启动项目中,并在其中一个 中添加了 这给了我一个404错误。 我的结论是:要么启动项目没有将JAR中的文件夹合并到它自己的中,要么我没有正确地访问该文件。 这些问题没有帮助(无法更改<code>WebMvcConfigurerAdapter</co

    • 问题内容: 我想做一些我认为并不困难的事情。 我有一个要打包为jar的应用程序,因为我有大约30个依赖项,并且我希望能够部署一个文件。 我有一些配置文件-一个属性文件和一个spring配置文件,以及我的log4 props文件- 我想在jar外部使用。我想我希望,如果我将它们与jar放在同一目录中,它将在运行时找到它们,但事实并非如此。 在开发过程中,我将这些文件放在eclipse项目的类路径的根

    • 问题内容: 我有一个巨大的JAR文件,是使用插件创建的。 我使用来运行它,并且UI随即打开。现在我要执行该文件,该文件也位于该JAR文件中,该怎么办? 我尝试将exe放到我的类路径中并从那里运行它,但尝试后发现类路径实际上是我的JAR所在的位置。 有什么建议? 在这里找到了这个东西,但这真的是最好的解决方案吗?似乎很多工作,我觉得这里有不同的情况,因为我可以自己定义exe的位置,而JAR是由我创建

    • 问题内容: 我正在使用jQuery 1.4.2创建ajax应用,并且尝试使用get(),post()和ajax()方法本身。我的php服务返回: 在我的成功回调中,我尝试以json.status和json [0] [0]的身份访问,但它始终返回“ undefined”。我究竟做错了什么? 我已经搜索了好几天了。我该如何访问返回的数据?任何帮助,将不胜感激。 问题答案: 要访问该状态值,您需要: 这

    • 我需要从应用程序的根内部获得一个资源,当它打包到JAR中时。我的项目是这样的: 我使用以下代码: 在打包到jar之前运行时,它会发现文件很好(在ProjectRoot内部)。运行jar时,它找不到它,并将此路径转换为。 此代码: 在打包之前运行时,查找中的资源。打包后,它声称从中获取资源。 此代码: 我想做的只是将资源放在中,并且能够从jar外部(从IDE运行类文件时)和内部(使用Maven将文件