zoukankan      html  css  js  c++  java
  • Spring在代码中获取properties文件属性

    这里介绍两种在代码中获取properties文件属性的方法。

    使用@Value注解获取properties文件属性:

    1.因为在下面要用到Spring的<util />配置,所以,首先要在applicationContext.xml中引入其对应的命名空间:

    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/util 
                http://www.springframework.org/schema/util/spring-util-3.0.xsd"

    2.创建properties文件并增加内容:

    #搜索服务地址
    solrURL=http://localhost:8080/solr 

    3.在applicationContext.xml中加入以下的配置:

    <!-- 添加注解驱动 -->
    <mvc:annotation-driven />
    <!-- 注解默认扫描的包路径 -->
    <context:component-scan base-package="com.wdcloud.solr" />
    
    <!-- 载入配置文件 -->
    <util:properties id="constants" location="classpath:config/statics.properties"/>

    4.使用@Value注解,在java类中获取properties文件中的值(这里constants对应上面的id):

      @Value("#{constants.solrURL}")
        public String testUrl;
    
        @RequestMapping(value = "/test", method = RequestMethod.GET)
        @ResponseBody
        public Result queryTest() {
            System.out.println("testUrl:" + testUrl);
        }

    测试结果:

    使用@Value获取属性值的方法有一个问题,我每用一次配置文件中的值,就要声明一个局部变量,即不能使用static和final来修饰变量。而第二种方法可以解决这个问题。

    重写PropertyPlaceholderConfigurer:

    1.通常我们使用spring的PropertyPlaceholderConfigurer类来读取配置信息,这里我们需要重写它:

    public class PropertyPlaceholder extends PropertyPlaceholderConfigurer {
    
        private static Map<String, String> propertyMap;
    
        @Override
        protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props)
                throws BeansException {
            super.processProperties(beanFactoryToProcess, props);
            propertyMap = new HashMap<String, String>();
            for (Object key : props.keySet()) {
                String keyStr = key.toString();
                String value = props.getProperty(keyStr);
                propertyMap.put(keyStr, value);
            }
        }
    
        // static method for accessing context properties
        public static String getProperty(String name) {
            return propertyMap.get(name);
        }
    }

    2.在applicationContext.xml中加入以下的配置:

      <!-- 加载properties文件配置信息 -->  
        <bean scope="singleton" id="propertyConfigurer"
            class="com.wdcloud.solr.util.PropertyPlaceholder">
            <property name="locations">
                <list>
                    <value>classpath*:config/statics.properties</value>    
                </list>            
            </property>        
        </bean>

    3.使用PropertyPlaceholder.getProperty方法获取属性值:

      public static final String solrURL = PropertyPlaceholder.getProperty("solrURL");
        
        @RequestMapping(value = "/test", method = RequestMethod.GET)
        @ResponseBody
        public Result queryTest() {
            System.out.println(solrURL);
        }

    测试结果:

    参考:

    http://1358440610-qq-com.iteye.com/blog/2090955

    http://www.cnblogs.com/Gyoung/p/5507063.html

  • 相关阅读:
    Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle(数学/双指针)
    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords(贪心/数学)
    Codeforces Round #648 (Div. 2) E. Maximum Subsequence Value(鸽巢原理)
    Codeforces Round #648 (Div. 2) D. Solve The Maze
    Codeforces Round #648 (Div. 2) C. Rotation Matching
    Codeforces Round #648 (Div. 2) B. Trouble Sort
    Codeforces Round #648 (Div. 2) A. Matrix Game
    一些常见的重置密码漏洞分析整理
    有无轻量级的可以显示md大纲的编辑器?
    Python3+ssl实现加密通信
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/6396235.html
Copyright © 2011-2022 走看看