我有一个简单的 Spring Boot 应用程序,需要将java.security.krb5.conf属性值设置为自定义 krb5.conf 文件。我已将文件添加到 src/main/resources 文件夹中,并且 maven 将其打包到 jar 中。
启动应用程序,我运行
java -jar -Djava.security.krb5.conf=<localPath>/krb5.conf my-jar.jar
目前我必须给出<localPath>
我机器上文件的路径。有没有办法引用 jar 中的文件,以便我可以在任何机器上运行而无需先在机器上创建文件文件?
到目前为止我尝试过的事情:
- 给
-Djava.security.krb5.conf=classpath:krb5.conf
(也是./krb5.conf)。没用 - 我看到“如何从类路径读取文件”的大多数示例都参考 getClass.getResource (文件名)。所以我尝试做 getClass.getResource (filename).getPath() 以便我可以在主类中启动应用程序时将其设置为 java.security.krb5.conf 系统属性,而不是从命令行传递。但是 getPath 显示的字符串类似于
/<diskPath>/my-jar.jar!/BOOT-INF/classes!/krb5.conf
,当我尝试读取文件进行测试时,该路径不起作用。 - 在调用 SprinApplication.run 之前,在 main 方法中即时创建文件副本到正在运行的目录。这就是我现在正在做的事情。
try(
InputStream in = new ClassPathResource("krb5.conf").getInputStream();
OutputStream out = new FileOutputStream( new File("krb5copy.conf"));) {
IOUtils.copy(in, out);
}
System.setProperty("java.security.krb5.conf","krb5copy.conf");
如果这个问题有解决方案,我可以看到其他用例,例如将 jar 中包含的 trustore 文件提供为 javax.net.ssl.trustStore 等。