第二章 SpringBoot的配置文件及注解

修改配置文件

spring boot中读取配置文件除了可以读取properties后缀的文件外,还引入了yml的读取,用起来也是相当简单,我们先把resource下的application.properties修改为yml文件,接着在其中添加端口号8082。

server:
  port: 8082

自定义属性以及@Value取值

除了我们一般使用yml来定义一些我们需要的属性外yml还支持自定义属性,在使用时只需要通过@Value来取值即可。那我们现在yml中添加一些属性(注意空格)。
lw:
 name: 老王
 age: 27
 height: 175cm
 weight: 60kg
 sex: 男
package com.example.controller;

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

@RequestMapping("/test")
@RestController
public class MyController {

    @RequestMapping("/hello")
    public String hello() {
        return "HELLO";

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

    @Value("${lw.age}")
    private Integer age;

    @Value("${lw.height}")
    private String height;

    @Value("${lw.sex}")
    private String sex;
    @RequestMapping(value = "/lw",method = RequestMethod.GET)
    public String getZZPInfo(){
        return "lw.name:" + name + " lw.age:" + age + " lw.height:" + height+" lw.aex:"+sex;
    }
    
}


然后我们在刚才的controller中新写一个方法去使用@Value取值,我们可以看到我们想要获取的配置信息已经全部拿到了。

这样写如果用很多个字段的时候就需要写很多valuez注解,我们可以创建一个pojo(实体类)来接收配置文件中的信息,首先我们先创建一个实体类User,给予相一致的属性,并给予set get方法以及重写toString方法。

这里我们使用@Component注解来保证待会该pojo可以被spring容器所注入,使用@ConfigurationProperties(prefix = “lw”)注解来获取配置文件中前缀为lw的配置,prefix指的是前缀。当然,在以前的版本中这个注解还有个属性就是local,这个属性用来指定文件的位置,现在已经取消,默认的是application.properties,前面我们也提及到了我们是可以另外创建properties文件的,这时候如果我们需要指定的话就需要加上另外一个注解@PropertySource(value = { "文件名" })

package com.example.entity;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix ="lw")
@PropertySource(value = { "文件名" }) 
public class User {
    private String name;

    private String height;

    private String weight;

    private Integer age;

    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHeight() {
        return height;
    }

    public void setHeight(String height) {
        this.height = height;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", height=" + height + ", weight=" + weight + ", age=" + age + ", sex=" + sex
                + "]";
    }
    
}


之后我们再来写一个方法来获取这个实体类,并且将返回类型直接修改为该实体类,这样可以直接返回一个实体类出去,更方便了,代码也更为整洁

@Autowired
	private User user;

@RequestMapping(value = "/user",method = RequestMethod.GET)
	public User getUser(){
		return user;
	}

在这里我们需要注意几个地方,第一个就是Controller控制层的包我们应该创建在项目名+Application文件所在包下面,和该文件为平级目录,然后在包里面进行控制层的创建,因为SpringBoot要求所有的类都是以这个启动类为基础,这样SpringBoot才能够对创建的类可视。在这不仅仅是针对控制层Controller而言,包含Dao层Service层以及entity等,也是相同的道理。具体的目录如下:


这样就可以返回需要的结果,如下:




但是 如果我们没有把entity包建得和该文件为平级目录,这样系统就会找不到对相应得bean 也就是实体类,这种情况解决得办法是在我们对应的controller类上加上@EnableConfigurationProperties({User.class})注解,它的作用是告诉Spring Boot 使能支持@ConfigurationProperties(prefix ="lw")注解,如下:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章