修改配置文件
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")注解,如下: