我在 Openshift 上部署了一个 spring-boot 应用程序。 该应用程序依赖于一个普通的旧 java 应用程序,该应用程序已作为 Maven 依赖项添加。 maven 依赖项需要类路径上有一个
foo.properties
文件,它使用以下方式加载 foo.properties
文件:
inputStream = this.getClass().getResourceAsStream("/foo.properties");
foo.properties
文件将包含不同的值,具体取决于其部署到的环境。
我尝试通过向 openshift 添加 configmap 并将其安装在以下位置来外部化属性:/deployments/config
我已将 spring 属性添加到 openshift 环境变量中:
spring.config.name foo
spring.config.location /deployments/config/
但是maven依赖无法拾取
foo.properties
,返回null。
我正在尝试实现的目标是否可以实现,或者是否有其他解决方案可以解决此问题?
spring.config.location与java本机getResourceAsStream方法无关,因此它没有帮助
为了让 JVM 将 /deployments/config/ 解释为类路径的一部分,您必须将此文件夹包含到 java 命令中的类路径中。
您可能有一个带有此行的 Dockerfile
java -jar service.jar
修改为
java -cp service.jar:/deployments/config mypackage.MyApplication
通过配置 OCP4 环境变量解决了这个问题:
JAVA_MAIN_CLASS
、JAVA_CLASSPATH
JAVA_MAIN_CLASS=-Dloader.main=your.spring.application.class org.springframework.boot.loader.JarLauncher
JAVA_CLASSPATH=/deployments/your.spring.application.jar:/deployments/data/:.
不可能在命令行上同时使用
-jar
和-cp
:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/java.html#-jar