關(guān)于@PropertySource配置的用法解析
@PropertySource配置用法
功能
加載指定的屬性文件(*.properties)到 Spring 的 Environment 中。可以配合 @Value 和@ConfigurationProperties 使用。
@PropertySource 和 @Value組合使用,可以將自定義屬性文件中的屬性變量值注入到當(dāng)前類的使用@Value注解的成員變量中。
@PropertySource 和 @ConfigurationProperties組合使用,可以將屬性文件與一個(gè)Java類綁定,將屬性文件中的變量值注入到該Java類的成員變量中。
源碼
package org.springframework.context.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.io.support.PropertySourceFactory;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {
/**
* 屬性源的名稱
*/
String name() default "";
/**
* 屬性文件的存放路徑
*/
String[] value();
/**
* 如果指定的屬性源不存在,是否要忽略這個(gè)錯(cuò)誤
*/
boolean ignoreResourceNotFound() default false;
/**
* 屬性源的編碼格式
*/
String encoding() default "";
/**
* 屬性源工廠
*/
Class<? extends PropertySourceFactory> factory() default PropertySourceFactory.class;
}
使用示例
屬性文件:demo.properties
demo.name=huang demo.sex=1 demo.type=demo
示例一:@PropertySource + @Value
package com.huang.pims.demo.props;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource(value = {"demo/props/demo.properties"})
public class ReadByPropertySourceAndValue {
? ? @Value("${demo.name}")
? ? private String name;
? ? @Value("${demo.sex}")
? ? private int sex;
? ? @Value("${demo.type}")
? ? private String type;
? ? @Override
? ? public String toString() {
? ? ? ? return "ReadByPropertySourceAndValue{" +
? ? ? ? ? ? ? ? "name='" + name + '\'' +
? ? ? ? ? ? ? ? ", sex=" + sex +
? ? ? ? ? ? ? ? ", type='" + type + '\'' +
? ? ? ? ? ? ? ? '}';
? ? }
}示例二:@PropertySource 和 @ConfigurationProperties
package com.huang.pims.demo.props;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource(value = {"demo/props/demo.properties"})
@ConfigurationProperties(prefix = "demo")
public class ReadByPropertySourceAndConfProperties {
? ? private String name;
? ? private int sex;
? ? private String type;
? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }
? ? public void setSex(int sex) {
? ? ? ? this.sex = sex;
? ? }
? ? public void setType(String type) {
? ? ? ? this.type = type;
? ? }
? ? public String getName() {
? ? ? ? return name;
? ? }
? ? public int getSex() {
? ? ? ? return sex;
? ? }
? ? public String getType() {
? ? ? ? return type;
? ? }
? ? @Override
? ? public String toString() {
? ? ? ? return "ReadByPropertySourceAndConfProperties{" +
? ? ? ? ? ? ? ? "name='" + name + '\'' +
? ? ? ? ? ? ? ? ", sex=" + sex +
? ? ? ? ? ? ? ? ", type='" + type + '\'' +
? ? ? ? ? ? ? ? '}';
? ? }
}示例測試
package com.huang.pims.demo.runners;
import com.huang.pims.demo.props.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class OutputPropsRunner implements CommandLineRunner {
? ? private static final Logger LOGGER = LoggerFactory.getLogger(OutputPropsRunner.class);
? ? @Autowired
? ? private ReadByPropertySourceAndValue readByPropertySourceAndValue;
? ? @Autowired
? ? private ReadByPropertySourceAndConfProperties readByPropertySourceAndConfProperties;
? ? @Override
? ? public void run(String... args) throws Exception {
? ? ? ? LOGGER.info(readByPropertySourceAndValue.toString());
? ? ? ? LOGGER.info(readByPropertySourceAndConfProperties.toString());
? ? }
}啟動(dòng)項(xiàng)目即可看到效果。

從截圖中可以看出,需要讀取的屬性配置,都已經(jīng)成功讀取出來了。
@PropertySource注解
@PropertySource是Spring boot為了方便引入properties配置文件提供的一個(gè)注解,可以標(biāo)注在SpringBoot的啟動(dòng)類上,還可以標(biāo)注在配置類(使用@Configuration標(biāo)注的類)上。
例如
@PropertySource(value = {"classpath:box.properties"})將classpath下的box.properties,注入到Spring環(huán)境中,使用@Value("${key}")取值。
示例
box.properties文件:
# 工具箱配置? preserveFilePath=/box/webserver/uploadfile/preservefile/
注入:
@SpringBootApplication
@PropertySource(value = {"classpath:box.properties"})
public class ToolboxApiApplication {
?
? ? public static void main(String[] args) {
? ? ? ? SpringApplication.run(ToolboxApiApplication.class, args);
? ? }?
}取值:
@RestController
public class DeleteFileController {
? ? @Value("${preserveFilePath}")
? ? private String preserveFilePath;
?
? ? @GetMapping("/deleteFile")
? ? public void test(){
? ? ? ? System.out.println(preserveFilePath);
? ? }
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud feign服務(wù)熔斷下的異常處理操作
這篇文章主要介紹了SpringCloud feign服務(wù)熔斷下的異常處理操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
FluentMybatis實(shí)現(xiàn)mybatis動(dòng)態(tài)sql拼裝和fluent api語法
本文主要介紹了FluentMybatis實(shí)現(xiàn)mybatis動(dòng)態(tài)sql拼裝和fluent api語法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Java Hibernate中使用HQL語句進(jìn)行數(shù)據(jù)庫查詢的要點(diǎn)解析
HQL是Hibernate框架中提供的關(guān)系型數(shù)據(jù)庫操作腳本,當(dāng)然我們也可以使用原生的SQL語句,這里我們來看一下在Java Hibernate中使用HQL語句進(jìn)行數(shù)據(jù)庫查詢的要點(diǎn)解析:2016-06-06
Spring Data JPA 建立表的聯(lián)合主鍵
這篇文章主要介紹了Spring Data JPA 建立表的聯(lián)合主鍵。本文詳細(xì)的介紹了2種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04

