0

スプリングを使用しています。外部化されたプロパティ ファイルがあります。以下のように読み込んでいます。

 <context:property-placeholder location="file:///C:/some.properties"/>

プロパティをキーと値のペアとしてセッションに保持するにはどうすればよいですか?

ServletContextListener を拡張したリスナーを書いてみました。

public class Sample implements ServletContextListener {
@Override
    public void contextInitialized(ServletContextEvent event) {
//here i tried to get the values of properties file as below.
InputStream stream = event.getServletContext().getResourceAsStream("C:\\some.properties");
//But here stream is coming as null


}

}

ここで何か不足していますか?

ありがとう!

4

2 に答える 2

1

ServletContextListner と通信する PropertyPlaceHolderConfigurer を使用することをお勧めします。このクラス PropertyPlaceHolderConfigurer には、すべてのプロパティのマップを取得できるメソッド呼び出し processProperties が 1 つあります。

 @Override
  protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess,
  Properties props) throws BeansException {
  super.processProperties(beanFactoryToProcess, props);
  resolvedProps = new HashMap<String, String>();
  for (Object key : props.keySet()) {
      String keyStr = key.toString();

      resolvedProps.put(keyStr, parseStringValue(props.getProperty(keyStr), props,
              new HashSet()));
  }
}

そして、listner contextInitialized() では、次のようにすることができます:

ServletContext servletContext = sce.getServletContext();
  WebApplicationContext context = WebApplicationContextUtils
          .getRequiredWebApplicationContext(servletContext);
  ExposablePropertyPlaceHolder configurer =(ExposablePropertyPlaceHolder)context.getBean(propertiesBeanName);
  sce.getServletContext().setAttribute(contextProperty, configurer.getResolvedProps());

ここで、ExposablePropertyPlaceHolder は、PropertyPlaceHolderConfigurer を拡張するクラスです。

于 2012-07-10T12:06:26.647 に答える