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‘]},[email protected]("#{configProperties[‘db.url‘]}"),如下,

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

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

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

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

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

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

时间: 2024-12-28 11:28:00

spring入门(二)【加载properties文件】的相关文章

spring 如何动态加载properties文件的内容

1. 在xml中配置你的properties路径: <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <!-- 指定资源文件基名称 jdbc为文件名,不包含扩展名 --&g

Spring加载properties文件的两种方式

在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,不需要修改源代码,这样更加方便.在Spring中也可以这么做,而且Spring有两种加载properties文件的方式:基于xml方式和基于注解方式.下面分别讨论下这两种方式. 1. 通过xml方式加载properties文件 我们以Spring实例化dataSource为例,我们一般会在beans

xml文件 加载properties文件的两种方法与注意事项

1.遇到的问题: 配置redisSpringContext.xml 时,遇到 properties加载失败,提示BeanDefinitionStoreException  和   java.lang.IllegalArgumentException: Could not resolve placeholder 'xxx'  , 找了很久都找不到原因,文件路径和键名都没写错,加载语法也没有写错...这就很难受了. 直到检查web.xml文件,,我猜测,是不是因为 springcontext-*.x

java加载properties文件的六中基本方式实现

java加载properties文件的方式主要分为两大类:一种是通过import java.util.Properties类中的load(InputStream in)方法加载: 另一种是通过import java.util.ResourceBundle类的getBundle(String baseName)方法加载. 注意:一定要区分路径格式 实现代码如下: 1 package com.util; 2 3 import java.io.FileInputStream; 4 import jav

java加载properties文件的六种方法总结

java加载properties文件的六种方法总结 java加载properties文件的六中基本方式实现 java加载properties文件的方式主要分为两大类: >一种是通过import java.util.Properties类中的load(InputStream in)方法加载: >另一种是通过import java.util.ResourceBundle类的getBundle(String baseName)方法加载. 注意:一定要区分路径格式 实现代码如下: 1 2 3 4 5

MyBatis Java不同方式加载文件时的路径格式问题、Mybatis中加载.properties文件

public class LoadPropTest { public static void main(String[] args) throws IOException { //一.Properties的load方法加载文件输入流 Properties props=new Properties(); File file1=new File("F:/Program Files/Java/IdeaProjects/MyBatisDemo/src/db.properties"); File

Spring Boot 2 启动时加载properties文件

每个项目从开发到测试再到上线所需要的各种环境是不同的,这就需要维护相应的配置文件,比如properties或yml文件.有了配置文件后就要考虑如何与应用进行集成. 对于云环境来讲,项目发布需要打成镜像,再进行部署.如果把spring boot项目连同配置文件(变量)一起打入JAR包并不是一个很好的选择,我们的做法是JAR不包含配置文件,待启动镜像和JAR时将配置文件动态赋值给JAR包. 对于Spring Boot项目,有两种做法可以实现该目的: 1. --spring.config.locati

类初始化的时候就加载properties文件中的属性值

private static final String RULESUBMITSERVLETURL; private static final String CALLSUBMITSERVLETURL; static { Properties props = new Properties(); String fileName = "sunshineserver.properties"; InputStream in = RuleDealJob.class.getClassLoader()

Java 加载Properties文件的六种方式

1.使用java.util.Properties类的load()方法 示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name)); Properties p = new Properties(); p.load(in); 2.使用java.util.ResourceBundle类的getBundle()方法 示例: ResourceBundle rb = ResourceBundle.getBundle(nam