我正在尝试访问 Spring Boot 应用程序中的 pem 文件。该文件位于 src/main/resources.
当我在本地计算机中启动应用程序时,它可以工作,但是当我将 jar 文件推送到 VPS 服务器或使用 docker 运行时,它无法工作。
它显示此错误:
java.lang.NullPointerException: Cannot invoke "String.getBytes(java.nio.charset.Charset)" because "src" is null
我使用此代码来获取数据:
public PrivateKey getPrivate() throws Exception {
ClassPathResource resource = new ClassPathResource("marchent_private.pem");
InputStream inputStream = resource.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String content = reader.readLine();
System.out.println(content);
content = content.replaceAll("\\s", "");
byte[] keyBytes = Base64.getDecoder().decode(content);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePrivate(spec);
}
那么现在我该如何解决这个问题呢?
如果您想查看更多信息,可以查看项目 git。 项目链接
建议将配置外部化,不要将其包含在 .jar 中:
当您在与本地环境不同的环境中运行应用程序时,您通常会使用 diffnet 命令(指定路径或属性的位置等)。执行此操作的常见方法是使用有关环境的不同属性文件:
具有外部化属性的命令示例:
java -jar /jarlocationinvm/yourjarname.jar --spring.profiles.active=prod --spring.config.location=/configlocationinvm/