Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个java项目中读取一个java项目的属性文件_Java_Spring_Maven - Fatal编程技术网

在另一个java项目中读取一个java项目的属性文件

在另一个java项目中读取一个java项目的属性文件,java,spring,maven,Java,Spring,Maven,以下是我的问题陈述: 我有一个项目是在春天建立的,是一个maven项目。有一个项目B(不使用任何框架),我正在开发它作为一个库,它的职责只是进行一些REST调用。我正在从项目A调用项目B类中的函数(包括A中作为jar的B) 现在,在进行一些调用时,我意识到我想读取项目B中项目A的local/UAT/PROD.properties文件中的值。这些文件的位置是A/src/main/resources/config 如何在不将值作为参数从A传递到B的情况下实现这一点?您需要确保要使用的属性文件实际包含

以下是我的问题陈述:

我有一个项目是在春天建立的,是一个maven项目。有一个项目B(不使用任何框架),我正在开发它作为一个库,它的职责只是进行一些REST调用。我正在从项目A调用项目B类中的函数(包括A中作为jar的B)

现在,在进行一些调用时,我意识到我想读取项目B中项目A的local/UAT/PROD.properties文件中的值。这些文件的位置是A/src/main/resources/config


如何在不将值作为参数从A传递到B的情况下实现这一点?

您需要确保要使用的属性文件实际包含在
projectB.jar
中。为此,您可能需要查阅Maven文档。如果文件实际上在jar中,那么您可以使用-

Properties.load(getClass.getResourseAsStream("path/to/the/property/file.properties"));

要获得道具。

您需要确保要使用的属性文件实际包含在
projectB.jar
中。为此,您可能需要查阅Maven文档。如果文件实际上在jar中,那么您可以使用-

Properties.load(getClass.getResourseAsStream("path/to/the/property/file.properties"));

获取道具。

最好将属性文件移到编译的包之外,使其独立于部署的环境。 您还应该考虑添加一个环境变量(AxObjixLoad)来指向属性文件以使其稍微有点模块化。要实现此目的,请将此代码段添加到servlet-context.xml中:

<context:property-placeholder
    location="file:${A_CONFIG_LOCATION}/configuration.properties" />

<beans:bean id="propertiesLoader"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

    <beans:property name="cacheSeconds" value="1" />
    <beans:property name="basenames">
        <beans:list>
            <beans:value>file:${A_CONFIG_LOCATION}/configuration
            </beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

文件:${A\u CONFIG\u LOCATION}/configuration

通过使用这种方法,您还将知道在Spring应用程序(app A)的运行时对您的属性文件所做的任何更改。通过将文件更改侦听器添加到属性文件读取器,您可以向应用程序B添加相同的行为

将属性文件移到您编译的包之外,使其独立于您部署的环境,这是一种很好的做法。 您还应该考虑添加一个环境变量(AxObjixLoad)来指向属性文件以使其稍微有点模块化。要实现此目的,请将此代码段添加到servlet-context.xml中:

<context:property-placeholder
    location="file:${A_CONFIG_LOCATION}/configuration.properties" />

<beans:bean id="propertiesLoader"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">

    <beans:property name="cacheSeconds" value="1" />
    <beans:property name="basenames">
        <beans:list>
            <beans:value>file:${A_CONFIG_LOCATION}/configuration
            </beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

文件:${A\u CONFIG\u LOCATION}/configuration

通过使用这种方法,您还将知道在Spring应用程序(app A)的运行时对您的属性文件所做的任何更改。通过将文件更改侦听器添加到属性文件读取器,您可以向应用程序B添加相同的行为

我觉得这是一个循环依赖的例子。项目B是项目A的外部库。项目B需要从项目A中读取一些属性。因此,在部署/引导应用程序时,您将首先读取哪些属性?依我看,您需要以某种方式将属性传递给项目B。或者创建一个可以从项目a和项目中读取的单独文件。这可以解决你的问题。我觉得这是一个循环依赖的情况。项目B是项目A的外部库。项目B需要从项目A中读取一些属性。因此,在部署/引导应用程序时,您将首先读取哪些属性?依我看,您需要以某种方式将属性传递给项目B。或者创建一个可以从项目a和项目中读取的单独文件。这可以解决你的问题。