spring-boot 读取配置文件中的内容

spring-boot-demo-properties

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<artifactId>spring-boot-properties</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>spring-boot-properties</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>com.chenzhihao</groupId>
		<artifactId>father</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--
		在 META-INF/additional-spring-configuration-metadata.json 中配置
		可以去除 application.yml 中自定义配置的红线警告,并且为自定义配置添加 hint 提醒
		 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	<!--消除Java的冗长代码 简单的Java对象(POJO)。它通过注释实现这一目的-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
		</dependency>
	</dependencies>

	<build>
		<finalName>spring-boot-demo-properties</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

ApplicationProperty.java

/**
 * <p>
 * 项目配置
 * </p>
 * @description: 项目配置
 */
@Data
@Component
public class ApplicationProperty {
	@Value("${application.name}")
	private String name;
	@Value("${application.version}")
	private String version;
}

DeveloperProperty.java

/**
 * <p>
 * 开发人员配置信息
 * </p>
 * @description: 开发人员配置信息
 */
@Data
@ConfigurationProperties(prefix = "developer") //根据配置文件中前缀读取属性
@Component
public class DeveloperProperty {
	private String name;
	private String website;
	private String qq;
	private String phoneNumber;
}

PropertyController.java

/**
 * <p>
 * 测试Controller
 * </p>
 */
@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);
	}
}

application.yml

server:
  port: 8080
  servlet:
    context-path: /demo_test
#spring.profiles.active来 读取其他文件名字前缀为`application-`dev.yml 或者 application-prod.yml
spring:
  profiles:
    active: dev,prod   #加载多个或者一个配置文件 , 隔开

引言:使用 spring.profiles.active 参数加载多个配置文件必须文件名前缀约定为application-xxx.ymlproperties后缀名都可以

一.根据springboot的配置文件命名约定,结合active可在不同环境引用不同的properties外部配置

application-dev.yml

application:
  name: 测试dev环境
  version: dev环境 

如果是application-dev.properties 写法是key=value

application-prod.yml

developer:
  name: 测试prod环境 
  website: prod环境 
  qq: prod环境 *****
  phone-number: prod环境 10086

扩展:

使用注解@Value映射

(得加载到配置文件才能使用,框架默认加载的是application.yml)

我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上

例如:

application.properties配置如下:

person.name=zhangsan
person.age=18

或者,application.yml配置如下:

person:
  name: zhangsan
  age: 18

实体Bean代码如下:

@Controller
public class QuickStartController {

    @Value("${person.name}")
    private String name;
    @Value("${person.age}")
    private Integer age;


    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "springboot 访问成功! name="+name+",age="+age;
    }

}

使用注解@ConfigurationProperties映射

通过注解@ConfigurationProperties(prefix=“配置文件中的key的前缀”)可以将配置文件中的配置自动与实体进行映射

application.properties配置如下:

person.name=zhangsan
person.age=18

或者,application.yml配置如下:

person:
  name: zhangsan
  age: 18

实体Bean代码如下:

@Controller
@ConfigurationProperties(prefix = "person")
public class QuickStartController {

    private String name;
    private Integer age;

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "springboot 访问成功! name="+name+",age="+age;
    }

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

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

注意:使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法

使用注解@PropertySource 加载配置文件

abc.properties配置如下:

name=zhihao

取数据方式

@Controller
@PropertySource(value = "classpath:abc.properties") //使用注解指定文件
public class QuickStartController {

    @Value("${name}")
    private String name;
  
    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
        return "springboot 访问成功! name="+name+";
    }
}

注意事项: 如果读取的属性为null,就查找下使用到配置类的bean是不是没交给框架管理,而没有使用到了框架管理的bean里面使用配置类,无法注入使用, (或者是不是重新new了个新的空配置类或者配置类没有交给框架管理)

错误示范:

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵懵懂懂程序员

如果节省了你的时间, 请鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值