Весна. Загрузить полный файл свойств в поле класса как карту - PullRequest
0 голосов
/ 21 октября 2019

это должно быть легко. Но я понятия не имею. Файл 'props.properties' на диске. Где какие-либо свойства в файле. У меня есть класс конфигурации:

@Configuration
@PropertySource(value = "file:props.properties", encoding = "utf8")
public class AppConfig {
...
  @Some_spring_annotation  <-- that is qestion
  private Map map;
...
}

Как загрузить все свойства из 'props.properties' в 'map' по Spring?

Ответы [ 3 ]

1 голос
/ 21 октября 2019

Вы можете загрузить весь файл porperties как Map, определив его как PropertiesFactoryBean, а затем используя его с аннотацией @Resource.

@Configuration
@PropertySource(value = "file:src/main/resources/test.properties", encoding = "utf8")
public class AppConfig {

@Value("${propertyname}")
String prop;

@Resource(name = "propertyBean")
private Map<String, String> propMap;

@Bean(name = "propertyBean")
public static PropertiesFactoryBean mapper() {
        PropertiesFactoryBean bean = new PropertiesFactoryBean();
        bean.setLocation(new FileSystemResource("src/main/resources/test.properties"));
        return bean;
}

public Map<String, String> getPropMap() {
    return propMap;
}
}

И получить доступ к любому ключу, присутствующему в файле свойств, используя ключ, как показано ниже: -

@RestController
public class Test {

@Autowired
private AppConfig appConfig;

@RequestMapping(value = "/test", method = RequestMethod.GET)
public String  login(HttpServletRequest request){
    return appConfig.getPropMap().get("application.name");
}

}



test.propeties:-
server.port1=8099
application.name=edge-service
propertyname=dddd

Здесь вам не нужно каждый раз писать аннотацию @Value, вы можете получить доступ к значениям с помощью propMap. Если вы хотите прочитать один ключ, используйте

@Value("${propertyname}")
String prop;

Даже вы можете определить данные карты в файле свойств

propertyname={key1:'value1',key2:'value2'}

Может быть много реализаций для достижения этого в зависимости от требований.

0 голосов
/ 21 октября 2019

Вы можете иметь значения из файла свойств, считанные в одном map

Ваш application.properties файл должен выглядеть как

app.properties.map.key1 = value1
app.properties.map.key2 = value2
app.properties.map.key3 = value3
app.properties.map.key4 = value4
app.properties.map.key5 = value5

И ваш @ConfigurationProperties аннотированный класс должен выглядетькак

@ConfigurationProperties(prefix = "app.properties")
public class AppProperties {

    private Map<String, String> map;

    // No Arguments Constructor

    // Getters & Setters
}

Кроме того, начиная с Spring Boot 2.2.0 , ваши @ConfigurationProperties классы могут быть неизменными

@ConfigurationProperties(prefix = "app.properties")
public class AppProperties {

    private final Map<String, String> map;

    @ConstructorBinding
    public AppProperties(Map<String, String> map) {

      this.map = map;
    }
}
0 голосов
/ 21 октября 2019

Запись файла свойств

valMap ={key1: '1', key2: '2', key3: '3'}

Пружинная аннотация

@Value("#{${valMap}}")
private Map<String, Integer> valMap;

Подробнее о аннотации @Value здесь: https://www.baeldung.com/spring-value-annotation

...