我有一个简单的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等。

最佳答案

给-Djava.security.krb5.conf = classpth:krb5.conf(也是./krb5.conf)。
没工作


实际上,这不是“ classpth”,而是“ classpath”。然后加上斜线。

-Djava.security.krb5.conf=classpath/:krb5.conf应该可以。

关于java - 从命令行启动应用程序时,如何将Spring Boot应用程序jar中的文件引用为-D属性值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60268044/

10-14 05:02