• 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

  • 相关阅读:
    油管上有多乱!!!这就是美国所谓的“言论自由”
    Gitee官网大规模封禁开源项目,如想解禁则需手动提交审核,在此过程中一些项目的信息也被gitee官方修改!!!
    再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(1) —— Firefox浏览器下自动运行游戏篇 (续)
    ubuntu环境下boost库的安装——Could NOT find Boost (missing: Boost_INCLUDE_DIR program_options) (Required is at least version "1.49.0")
    【转载】 Makefile的静态模式%.o : %.c
    任意界面调出微信的快捷键
    windows cmd切换目录
    w10 本地邮箱同步163,出现可能需要更新密码或授予账户同步到此设备的权限
    yaml有没有多行注释的方法
    笔记本电脑选购显示器
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/6396235.html
Copyright © 2020-2023  润新知