spring boot @Value 获取计算机中绝对路径文件的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot @Value 获取计算机中绝对路径文件的内容相关的知识,希望对你有一定的参考价值。

参考技术A 默认情况下使用

这样获取到的是项目classpath 下的 aaa.txt

如果想获取非项目路径下的文件内容怎么办呢,看了下@Value的好像也没有说,

其实

这样是可以获取到 百度首页的内容的.它这里使用的是https协议.

那么同样的我们可以使用file协议获取文本的内容

即:

使用@Value 有一个好处就是,你不用关心文本内容的变化,你每次调用的时候,springboot 会自动帮你重新加载.

是否可以使用 Spring Boot 注释 @Value 从 application.properties 文件中获取 Map 值 [重复]

【中文标题】是否可以使用 Spring Boot 注释 @Value 从 application.properties 文件中获取 Map 值 [重复]【英文标题】:Is it possible to get Map value from application.properties file using springboot annotation @Value [duplicate] 【发布时间】:2019-03-28 11:12:01 【问题描述】:

我需要从application.properties文件中获取静态键值对数据,是否可以通过SpringBoot注解@Value来实现。

建议将不胜感激。

示例: languageMap='1'='English','2'='French'

@Value($("languageMap"))
Map<String,String> languageMap;

【问题讨论】:

我想如果你选择application.yml格式而不是application.properties,这会更直观。这种格式有“字典”和地图。 【参考方案1】:

application.properties:

languageMap[1]= English
languageMap[2]= French

代码,只需使用@ConfigurationProperties 和setter 方法(setLanguageMap) 是Map 字段的必填项,否则您将无法获取值。

import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController("/myclass")
@ConfigurationProperties
public class TestControllerEx 

  Map<String, String> languageMap;

  @GetMapping
  public ResponseEntity control() 

    System.out.println(getLanguageMap());

    return new ResponseEntity("success", HttpStatus.OK);
  

  public Map<String, String> getLanguageMap() 
    return languageMap;
  

  public void setLanguageMap(Map<String, String> languageMap) 
    this.languageMap = languageMap;
  

输出:

1=English, 2=French

【讨论】:

【参考方案2】:

使用@ConfigurableProperties 并重组您的属性文件:

@Configuration
@PropertySource("<prop-file-path>")
@ConfigurationProperties()
public class ConfigProperties 
    @Value($("languageMap"))
    Map<String,String> languageMap;

属性文件:

languageMap.1=English
languageMap.2=French

【讨论】:

【参考方案3】:

您可以使用文档中提到的 @ConfigurationProperties 注释来注入 Map。

https://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#boot-features-external-config-loading-yaml]

根据该文档,您可以加载属性:

language.map[0]='英语'

language.map[1]='法语'

@ConfigurationProperties(prefix="language")
public class LanguageMap

    private List<String> languages= new ArrayList<String>();

    public List<String> getLanguages() 
        return this.languages;
    

【讨论】:

【参考方案4】:

是的,可以使用@ConfigurableProperties。您必须创建一个类来访问这些属性。看看this。在该示例中,查看如何访问 additionalHeaders。那会帮助你。

【讨论】:

以上是关于spring boot @Value 获取计算机中绝对路径文件的内容的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot @ConfigurationProperties 和@Value

spring boot 配置属性值获取注解@Value和@ConfigurationProperties比较

spring boot项目中使用@Value获取yml配置文件中的属性值不对的问题。

Spring-boot中@ConfigurationProperties,@Value,@PropertySource

在Spring-boot中,为@Value注解添加从数据库读取properties支持

Spring Boot @Value注解中文配置乱码