是否可以使用springboot注释@Value

时间:2018-10-24 06:21:52

标签: java spring spring-mvc spring-boot spring-batch

我需要从application.properties文件中获取静态键值对数据。可以通过SpringBoot注释@Value来做到这一点。

建议,不胜感激。

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

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

4 个答案:

答案 0 :(得分:2)

您可以使用文档中提到的 @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] ='法语'

put

答案 1 :(得分:2)

application.properties:

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

代码,只需使用@ConfigurationProperties,并且Map字段必须使用setter方法(setLanguageMap),否则将无法获取值。

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 :(得分:1)

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

答案 3 :(得分:1)

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

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

属性文件:

languageMap.1=English
languageMap.2=French