目录
- 1.定义配置文件
- 2. 定义Controller类
- 3. 测试
- 4. 优化
- 4.1 封装实体类
- 4.3 定义controller类
- 4.2 测试
本文将介绍如何使用@value读取配置文件的内容。
在实际项目中,往往会在配置文件中写项目部署需要配置的环境信息(数据库驱动,数据库账号密码等),因此学会读取配置文件信息十分关键。 项目结构
1.定义配置文件
文件名:application.properties
# 端口号
server.port=8081
# 修改上下文地址为localhost:8081/zjh-value/hello
server.servlet.context-path=/zjh
# 自定义配置信息
school.name=中科大
school.age=200
school.local=西安
myMajor=computer science
2. 定义Controller类
文件名:helloSpring
package com.zjh.Controller;
import com.zjh.vo.School;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
//@controller的解释
//声明成一个controller类,表明这是springMVC Controller的对象。
//1、浏览器访问url地址:localhost:8081/zjh/hello时,后台寻找Controller对象,找到了注解@Controller,找到了这个类
//2、找到在类中使用了@RequestMapping("/hello")的方法,该方法返回一个字符串
@Controller
public class helloSpring {
//解释:.properties类型的文件中,要求key=value的格式
//因此我们先声明一个与key同名的属性,再用@Value把数据从配置文件中取出来,就可以直接用了
@Value("${server.port}")
private String port;
@Value("${server.servlet.context-path}")
private String path;
@Value("${school.name}")
private String name;
@Value("${school.age}")
private int age;
@Value("${school.local}")
private String local;
@Value("${myMajor}")
private String myMajor;
// 利用@Value一个一个获取配置文件的信息
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return path+", port="+port+", name="+name+", age="+age+", local="+local+", myMajor="+myMajor;
}
}
3. 测试
运行结果
4. 优化
可以发现,我们使用了很多各@value注解,需要一一读取到相关信息
如果一个一个的取配置文件的数据,太麻烦。所以希望可以把配置文件的数据包装成一个java对象,一次性取出
这里尝试一次性取出 school.name=西科大 、school.age=200、 school.local=西安
怎么做呢,那就是将school前缀的信息封装成一个实体类
4.1 封装实体类
文件名:school
//@Component解释:
//利用注解声明这个类是一个Bean,需要交给IOC管理
@Component
//@ConfigurationProperties解释:
//读取配置文件的前缀信息,这样就在配置文件中找school开头的key
@ConfigurationProperties(prefix = "school")
public class School {
private String name;
private int age;
private String local;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getLocal() {
return local;
}
public void setLocal(String local) {
this.local = local;
}
@Override
public String toString() {
return "School{" +
"name='" + name + '\'' +
", age=" + age +
", local='" + local + '\'' +
'}';
}
}
4.3 定义controller类
文件名:hellospring2
@Controller
public class helloSpring2 {
@Value("${server.port}")
private String port;
@Value("${server.servlet.context-path}")
private String path;
@Value("${myMajor}")
private String myMajor;
//2.P24 把配置文件的数据映射为java对象
//把配置属性包装成java对象,便捷式获取信息
//@Resource说明:依赖注入
//将声明为Bean的类School注入到IOC容器里面,IOC容器自动生成该类的对象,并且把该对象赋值给sch
@Resource
private School sch;
@RequestMapping("/dateSchool")
@ResponseBody
public String test(){
return sch.toString();
}
}
4.2 测试
成功返回
思考问题:
为什么使用@vaule,就可以读取到配置文件内容?
答:因为在实体类上使用@value会将配置文件信息注入到对应的属性中
为什么这里没有使用@value,还可以读取到配置文件的内容?
答:使用@ConfigurationProperties注解来直接将配置文件中的值注入到类的属性中,而无需使用@Value注解。