对于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值是自定义的,但需要保持两者一致,否则获取不到内容。
对于一级和二级的配置,读取方式有所不同。实际上都是可以使用中括号的方式注入的,但是为了书写简单,就省略了中括号。
就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !