springboot学习日记(二)

学习如何获取配置文件的自定义配置,以及多环境下的配置文件信息获取,以下所有代码都可以从文末链接获取

新建两个配置类

ApplicationProperty.java

/**
 * <p>
 * 项目配置
 * </p>
 *
 * @author yangkai.shen
 * @date Created in 2018-09-29 10:50
 */
@Data
@Component
public class ApplicationProperty {
	@Value("${application.name}")
	private String name;
	@Value("${application.version}")
	private String version;
}

DeveloperProperty.java

/**
 * <p>
 * 开发人员配置信息
 * </p>
 *
 * @author yangkai.shen
 * @date Created in 2018-09-29 10:51
 */
@Data
@ConfigurationProperties(prefix = "developer")
@Component
public class DeveloperProperty {
	private String name;
	private String website;
	private String qq;
	private String phoneNumber;
}

对上述代码中出现的一些注解做一些解释

1、@Data注解

@Data需要安装lombok插件,具体是在maven依赖中添加如下代码:

<dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
</dependency>
创建一个实体类
import lombok.Data;

@Data
public class MyTestBean {
    private Integer id;
    private String name;
    private String password;
}
测试代码
public class TestMyBean {
    public static void main(String[] args){
        MyTestBean m=new MyTestBean();
        m.setId(1);
        m.setName("lyk");
        m.setPassword("123456");
        System.out.println(m);
    }
}

输出结果为MyTestBean(id=1, name=lyk, password=123456)
部分扩展知识:

  • @Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法
  • @Getter/@Setter : 注解在类上, 为类提供读写属性
  • @ToString : 注解在类上, 为类提供 toString() 方法
  • @Log4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象

2、@Component注解

在介绍@Component注解之前,先列出几个常见注解:

  • @Controller:controller控制器层(注入服务)
  • @Service :service服务层(注入dao)
  • @Repository :dao持久层(实现dao访问)
  • @Component:标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的

注解本质上就是一个类,开发中我们可以使用注解取代xml配置文件

@Component("xxx")相当于给随后定义的类配置了ID
可以通过getBean("xxx")来获取对应Bean

3、@ConfigurationProperties 与 @Value

Spring源码中大量使用了ConfigurationProperties注解,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。
该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上。
Spring的有效运行是通过上下文(Bean容器)中Bean的配合完成的,Bean可以简单理解成对象,有些对象需要指定字段内容,那么这些内容我们可以通过配置文件进行绑定,然后将此Bean归还给容器。

@ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便
@ConfigurationProperties 的 POJO类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在POJO里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”

通过@Value将外部配置文件的值动态注入到Bean中。配置文件主要有两类:

application.properties在springboot启动时默认加载此文件
自定义属性文件。自定义属性文件通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二属性文件存在相同key,则最后一个属性文件里的key启作用。加载文件的路径也可以配置变量,如${anotherfile.configinject}


PropertyController.java

package com.xkcoding.properties.controller;

import cn.hutool.core.lang.Dict;
import com.xkcoding.properties.property.ApplicationProperty;
import com.xkcoding.properties.property.DeveloperProperty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 测试Controller
 * </p>
 *
 * @author yangkai.shen
 * @date Created in 2018-09-29 10:49
 */
@RestController
public class PropertyController {
    private final ApplicationProperty applicationProperty;
    private final DeveloperProperty developerProperty;

    @Autowired
    public PropertyController(ApplicationProperty applicationProperty, DeveloperProperty developerProperty) {
        this.applicationProperty = applicationProperty;
        this.developerProperty = developerProperty;
    }

    @GetMapping("/property")
    public Dict index() {
        return Dict.create().set("applicationProperty", applicationProperty).set("developerProperty", developerProperty);
    }
}

注册一个控制器,用于返回所获取的配置信息
输入http://localhost:8080/demo/property来访问
得到如下结果

参考资料:
https://github.com/xkcoding/spring-boot-demo/tree/master/demo-properties
https://blog.csdn.net/qq_37433657/article/details/83275051
https://blog.csdn.net/qq_37606901/article/details/91357882

posted @ 2021-01-19 19:48  YukioLee  阅读(83)  评论(0编辑  收藏  举报