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了個新的空配置類或者配置類沒有交給框架管理)

錯誤示範:

在這裏插入圖片描述

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