• spring入门(二)【加载properties文件】


    在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spring提供了读取properties文件的支持,下面看具体的配置,

    一、<context:property-placeholder location=""/>标签

    在项目中经常用到数据库连接,连接数据库需要一些参数:driver、url、username、password,这些信息通常保存在properties文件中,如,在我的项目src目录下有db.properties文件,文件内容,

    db.driver=com.mysql.jdbc.Driver
    db.url=jdbc:mysql://192.168.8.32:3306/test
    db.username=root
    db.passwd=root

    现在要使用spring加载此文件,我们看spring如何配置,在spring的配置文件中有<context:property-placeholder location="classpath:db.properties"/>标签,此标签支持单个文件的加载,不过可以使用通配符,如,classpath:db*.properties,这里指定了src下的db.properties文件,那么如何使用加载的文件呢,可以使用${db.driver},下面看一个在数据库连接池中使用的例子,

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${db.driver}"></property>
            <property name="url" value="${db.url}"></property>
            <property name="username" value="${db.username}"></property>
            <property name="password" value="${db.passwd}"></property>
        </bean>    

    在spring的配置文件中可以使用上面的方式获得db.properties文件中的值,

    那么,现在我要在java类中使用db.properties文件中的值呢,可以使用@Value("${db.driver}"),使用这样一个注解别可以给类中的属性赋值,如下

    package com.cn.study.day2;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    @Component
    public class Configuration {
        @Value("${db.driver}")
        private String dbDriver;
        @Value("${db.url}")
        private String dbUrl;
        @Value("${db.username}")
        private String dbUsername;
        @Value("${db.passwd}")
        private String dbPasswd;
        public String getDbDriver() {
            return dbDriver;
        }
        public String getDbUrl() {
            return dbUrl;
        }
        public String getDbUsername() {
            return dbUsername;
        }
        public String getDbPasswd() {
            return dbPasswd;
        }
        
    
    }

    这里把注解用在了属性上面,也可以用在setXXX方法上,下面是测试代码,

    //cpac是ClassPathXmlApplicationContext的一个实例对象
                    Configuration con=(Configuration)cpac.getBean("configuration");
        
                    System.out.println(con.getDbDriver());
                    System.out.println(con.getDbUrl());
                    System.out.println(con.getDbUsername());
                    System.out.println(con.getDbPasswd());

    打印结果如下,

    com.mysql.jdbc.Driver
    jdbc:mysql://192.168.8.32:3306/test
    root
    root

    以上是在java类中使用properties文件的例子。
    二、PropertyPlaceholderConfigurer类

    配置PropertyPlaceholderConfigurer类的bean

    <bean id="appProperty" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <array>
                <value>classpath:quartz.properties</value>
                <value>classpath:db.properties</value>

    </array> </property> </bean>

    使用这种方式可以指定多个文件,只要配置多个<value>标签即可,这种方式和<context:property-placeholder location="classpath:db.properties"/>方式是一样的。使用方式和第一种是一致的。

    <context:property-placeholder location="classpath:db.properties"/>和配置PropertyPlaceholderConfigurer类的方式在spring的配置文件中只有一个起作用,即,假如都配置了,只有最先配置的才会被配置文件加载到,因为spring容器采用反射扫描机制,如果已经有一个PropertyPlaceholderConfigurer类的实例,那么就不会再创建了,因此使用其中一种方式即可

    三、PropertiesFactoryBean类

    可以配置此类,如下,

    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
             <property name="locations">
                 <list>
                      <value>classpath:quartz.properties</value>
    <value>classpath:db.properties</value>
    </list> </property> </bean>

    要使用这种方式加载的properties文件,需要使用#{beanId['键']},如上面的,#{configProperties['db.url']}使用这种方式便可以得到db.url的值,

    如,数据库连接中,

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName">
                <value>${db.driver}</value>
            </property>
            <property name="url">
                <value>#{configProperties['db.url']}</value>
            </property>
            <property name="username">
                <value>#{configProperties['db.username']}</value>
            </property>
            <property name="password">
                <value>123456</value>
            </property>
        </bean>    

    上面的方式混合使用了${db.driver}和#{configProperties['db.url']}的方式,这两种方式都是可以的,

    在java代码中的使用方式也是使用注解@Value,但是值是#{configProperties['db.url']},Z@Value("#{configProperties['db.url']}"),如下,

    @Value("#{configProperties['db.username']}")
        private String dbUsername;

    此注解用在setXXX方法上也是可以的。

    上面是三种spring加载properties文件的方式,有人会问,为什么在配置时使用了locations、location这样的属性呢,下面是一个有关properties的UML类图,

    这个类图说明了各个类之间的继承关系,其中locations、location都是在共同的父类PropertiesLoaderSupport中定义的,这是一个抽象类。

    好了,关于spring加载properties的内容就说那么多;其中源码还得继续研究呢。

    有不正之处欢迎指出,谢谢!

  • 相关阅读:
    汉诺塔IX
    N!
    卡片游戏
    vuejs 2—bind
    vuejs 1—基础
    困难的串 Kryptn Factor Uva129
    JavaScript13—JSON
    JavaScript练习—二级菜单
    JavaScript12—tools.js
    JavaScript11—定时器
  • 原文地址:https://www.cnblogs.com/teach/p/5781842.html
Copyright © 2020-2023  润新知