Spring读取properties内容

对于SpringBoot的项目,读取配置文件的内容非常简单,但是对于spring的项目,比如ssm项目,读取配置文件的内容需要手动配置。在使用注入方式之前,默认已经有一个基本ssm框架的空项目。

可参考项目源码:https://github.com/zhongyushi-git/spring-collection.git。下载代码后,示例代码在spring-properties文件夹下。 

1.使用xml方式注入

一般使用xml方式注入数据库的基本信息。

1)在资源目录下新建db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db2020?characterEncoding=utf-8
jdbc.username=root
jdbc.password=zys123456

2)在applicationContext.xml中加载配置文件

<!-- 配置数据源dataSource -->
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="10"/>
<property name="maxIdle" value="5"/>
</bean>

自此,数据库就可以访问了。xml方式注入到此结束。很多时候还需要通过java代码的方式读取配置文件的内容,下面进行详细的介绍。

2.@Value+@PropertySource注入

使用@Value注解方式注入配置文件的内容是最常用的方式,也是spring推荐的方式。

1)新建SystemProperties类,用于指定配置的路径。

package com.zxh.entity;


import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource({"classpath:app.properties"})
public class SystemProperties {}

使用@PropertySource注解来指定配置文件的路径。当需要同时读取多个配置文件的内容时,直接在大括号后面使用逗号分隔即可,如下:

@PropertySource({"classpath:app.properties","classpath:db.properties"})

2)新建配置文件app.properties

name=zhongxiaohei
password=1234

app.name=xiaoxixi
app.password=000000

china_name=钟小嘿

3)新建UserController进行接口,使用@value注解和${}获取内容

package com.zxh.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Value("${name}")
    private String name1;

    @Value("${app.name}")
    private String name2;

    @Value("${china_name}")
    private String chinaName;



    @GetMapping("/get1")
    public String get1(){
        return name1;
    }

    @GetMapping("/get2")
    public String get2(){
        return name2;
    }

    @GetMapping("/get3")
    public String get3(){
        return chinaName;
    }

}

4)配置tomcat,启动项目,打开浏览器,按照下面的顺序访问:

访问http://localhost:8080/get1,返回 { data: "zhongxiaohei" },读取文件正常。

访问http://localhost:8080/get2,返回 { data: "xiaoxixi" },读取文件正常。

访问http://localhost:8080/get3,返回 { data: "钟小嘿" },读取文件正常。

5)代码分析。

在app.properties文件中,分别使用了一级和二级的配置,二级配置之前使用"."分隔,但是它们的读取方式都一样的。

需要注意的是,使用@Value时,对于参数"username"和"user.name"不能使用,它有默认值,是当前操作系统的名称。如果需要使用,可在前面加上前缀。

3.@Value+Bean注入

 1)在applicationContext.xml中加载配置文件

<!-- spring加载配置文件 -->
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:app.properties</value>
</list>
</property>
</bean>

这里只加载了单个文件,如果需要加载多个文件,直接写多个<value>标签,标明文件的位置即可,如

<list>
<value>classpath:app.properties</value>
<value>classpath:db.properties</value>
<value>classpath:aaa.properties</value>
</list>

2)在UserController接口,使用@value注解和#{}获取内容。添加两个访问接口:

    @Value("#{configProperties.name}")
    private String name3;

    @Value("#{configProperties['app.name']}")
    private String name4;


    @GetMapping("/get4")
    public JSONObject get4() {
        JSONObject json = new JSONObject();
        json.put("data", name3);
        return json;
    }

    @GetMapping("/get5")
    public JSONObject get5() {
        JSONObject json = new JSONObject();
        json.put("data", name4);
        return json;
    }

3)重启tomcat,分别访问get4和get5,数据正常返回。分析如下:

注入的前缀是"configProperties",原因是在获取内容时,需要使用applicationContext.xml中配置的bean的id值作为前缀。这个id值是自定义的,但需要保持两者一致,否则获取不到内容。

对于一级和二级的配置,读取方式有所不同。实际上都是可以使用中括号的方式注入的,但是为了书写简单,就省略了中括号。

posted @ 2021-04-14 12:01  钟小嘿  阅读(1111)  评论(0编辑  收藏  举报