2. SpringBoot快速回顾(@value读取配置文件)

目录

  • 1.定义配置文件
  • 2. 定义Controller类
  • 3. 测试
  • 4. 优化
    • 4.1 封装实体类
    • 4.3 定义controller类
    • 4.2 测试

本文将介绍如何使用@value读取配置文件的内容。
在实际项目中,往往会在配置文件中写项目部署需要配置的环境信息(数据库驱动,数据库账号密码等),因此学会读取配置文件信息十分关键。 项目结构

2. SpringBoot快速回顾(@value读取配置文件)_第1张图片

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. 测试

运行结果
2. SpringBoot快速回顾(@value读取配置文件)_第2张图片

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 测试

2. SpringBoot快速回顾(@value读取配置文件)_第3张图片
成功返回

思考问题:

为什么使用@vaule,就可以读取到配置文件内容?

答:因为在实体类上使用@value会将配置文件信息注入到对应的属性中

为什么这里没有使用@value,还可以读取到配置文件的内容?

答:使用@ConfigurationProperties注解来直接将配置文件中的值注入到类的属性中,而无需使用@Value注解。

你可能感兴趣的:(springboot复习,spring,boot,后端,java)