關于@PropertySource配置的用法解析
@PropertySource配置用法
功能
加載指定的屬性文件(*.properties)到 Spring 的 Environment 中??梢耘浜?@Value 和@ConfigurationProperties 使用。
@PropertySource 和 @Value組合使用,可以將自定義屬性文件中的屬性變量值注入到當前類的使用@Value注解的成員變量中。
@PropertySource 和 @ConfigurationProperties組合使用,可以將屬性文件與一個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();
/**
* 如果指定的屬性源不存在,是否要忽略這個錯誤
*/
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());
? ? }
}啟動項目即可看到效果。

從截圖中可以看出,需要讀取的屬性配置,都已經(jīng)成功讀取出來了。
@PropertySource注解
@PropertySource是Spring boot為了方便引入properties配置文件提供的一個注解,可以標注在SpringBoot的啟動類上,還可以標注在配置類(使用@Configuration標注的類)上。
例如
@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);
? ? }
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
FluentMybatis實現(xiàn)mybatis動態(tài)sql拼裝和fluent api語法
本文主要介紹了FluentMybatis實現(xiàn)mybatis動態(tài)sql拼裝和fluent api語法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
Java Hibernate中使用HQL語句進行數(shù)據(jù)庫查詢的要點解析
HQL是Hibernate框架中提供的關系型數(shù)據(jù)庫操作腳本,當然我們也可以使用原生的SQL語句,這里我們來看一下在Java Hibernate中使用HQL語句進行數(shù)據(jù)庫查詢的要點解析:2016-06-06
Spring Data JPA 建立表的聯(lián)合主鍵
這篇文章主要介紹了Spring Data JPA 建立表的聯(lián)合主鍵。本文詳細的介紹了2種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04

