如何使用spring从属性文件中检索值

slmsl1lt  于 2022-12-02  发布在  Spring
关注(0)|答案(1)|浏览(129)

主要问题:
有人能告诉我如何使用Spring在Java代码中检索值,以便从applicationContext.xml中的context:property-placeholder标记指定的任何属性文件中获取值吗?
详细说明:
我对Spring很陌生。试图用它来检索可配置的属性,让我的应用程序连接到一个(可配置的)JMS队列。
我有一个使用Spring的Java/J2EE Web应用程序。
在src/main/resources/applicationContext.xml中,我有以下行:

<context:property-placeholder location="classpath:myapp.properties" />

然后,在src/main/resources/myapp.properties文件中,我有以下行:

myservice.url=tcp://someservice:4002
myservice.queue=myqueue.service.txt.v1.q

我遇到的问题是,我一辈子都不知道如何将www.example.com中定义的myservice.url的值导入myapp.properties正在运行的java代码中。
我尝试了一个静态函数[在应用程序中调用]:

public static String getProperty(String propName)
{
  WebApplicationContext ctx = 
      FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
  Environment env = ctx.getEnvironment();
  retVal = env.getProperty(propName);
  return retVal;
}

然而,当它返回一个填充的环境对象“env”时,env.getProperty(propName)方法返回null。

eqzww0vc

eqzww0vc1#

好吧-非常非常感谢Rustam给了我所需要的线索。我解决这个问题的方法是这样的:
在src/main/resources/applicationContext.xml中,我有以下行:

<context:property-placeholder location="classpath:myapp.properties" />

然后,在src/main/resources/myapp.properties文件中,我有以下行:

myservice.url=tcp://someservice:4002
myservice.queue=myqueue.service.txt.v1.q

然后我有一个类如下:

package my.app.util;
import org.springframework.beans.factory.annotation.Value;

public class ConfigInformation 
{
    public ConfigInformation()
    {
       // Empty constructor needed to instantiate beans
    }

    @Value("${myservice.url}")
    private String _myServiceUrl;
    public String getMyServiceUrl()
    {
        return _myServiceUrl;
    }

    @Value("${myservice.queue}")
    private String _myServiceQueue;
    public String getMyServiceQueue()
    {
        return _myServiceQueue;
    }
}

然后,在applicationContext.xml中有以下声明:

<bean name="configInformation" class="my.app.util.ConfigInformation">
</bean>

完成此操作后,我可以在代码中使用以下行:

WebApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
ConfigInformation configInfo = (ConfigInformation) ctx.getBean("configInformation");

因此,configInfo对象将使用分配给“myservice.url”和“myservice.queue”的值进行填充,这些值可以通过以下方法调用进行检索:

configInfo.getMyServiceUrl()

configInfo.getMyServiceQueue()

相关问题