如何从spring-boot jar BOOT-INF \ lib文件夹中提取文件

时间:2019-07-02 15:36:28

标签: java spring-boot

在启动spring-boot应用程序时,如何提取与*.zip打包在一起的spring-boot jar文件。之所以我要提取它们,是因为这些依赖项*.zip包含特定于环境的本机文件(window的.dll和linux的.so)。

我认为我可以使用https://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/#howto-extract-specific-libraries-when-an-executable-jar-runs

如何将临时位置设置为java.libarary.path或我可以配置该路径。

2 个答案:

答案 0 :(得分:0)

“如何获取特定于环境的配置文件?”问题有两种典型的解决方案。

解决方案1: 使用一个包含每个环境设置的属性文件。 使用特定于环境的属性后缀。 这是一个示例:

    dev.port=123456
    ist.port=98745
    prod.prot=90458

根据应用程序运行的环境,它将选择以下一种 端口值。

解决方案2: Spring-Boot允许您为应用程序属性配置替代文件。 一种方法是设置 “ spring.config.location” 调用之前的值 springApplication.run方法。 这是一个示例(长字符串包装成适合不滚动显示):

springApplicationBuilder.properties(
    "spring.config.location=classpath:/default.properties," +
    "/local/path/on/deploy/host/config/overrides.properties");
springApplication = springApplicationBuilder.build();

springApplication.run(argumentArray);

编辑:每个评论已更新。

考虑执行以下操作:

  1. 将每个主机的JNDI文件本地存储在每个主机上。
  2. 将JNDI文件的路径(在主机上)存储在配置属性中。
  3. 在每台计算机上配置JNDI文件路径(通过使用覆盖文件或通过使用环境变量)。

答案 1 :(得分:0)

不可能在运行时知道该zip的解压缩位置,这意味着您无法提前设置query = session.query(table).filter(table.news.contains([some_int])).all()

我建议按原样将java.library.path.dll文件保留在项目中,而不要将它们打包在zip文件中。这样,您就可以在设置库路径时引用一个恒定路径。

我会避免将它们直接放置在.so目录中,而是将其放置在单独的目录中。这只是个人喜好;我相信,如果您将本机文件放在其中,那么它将起作用,并且我相信在这种情况下,您需要设置resources(未经测试)。

例如,我们使用Docker部署了具有本地依赖项的spring boot应用程序,我们只是将java.library.path=resources文件作为Docker卷挂载了,可以在.so的容器中使用。然后,我们仅将JVM args设置为包含/native

请注意,您可能还需要为Linux设置-Djava.library.path=/nativeThis question可能会有帮助。