Опция 1:
В вашем классе конфигурации прочитайте файл application.properties, используя аннотацию @PropertySource, как показано ниже.
MyAppConfiguration.java
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource(name = "customPropertySource", value = "classpath:application.properties")
public class MyAppConfiguration {
}
Затем в вашем POJO (или любом другом компоненте пружины) вы можете получить класс Environment для получения свойств.
MyPojo.java
import java.util.Map;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.io.support.ResourcePropertySource;
import org.springframework.stereotype.Component;
@Component
public class MyPojo {
@Autowired
private ConfigurableEnvironment env;
private Map<String, Object> schedules;
@PostConstruct
public void properties() {
Object propSourceObj = env.getPropertySources().get("customPropertySource");
if (propSourceObj instanceof ResourcePropertySource) {
ResourcePropertySource propSource = (ResourcePropertySource) propSourceObj;
setSchedules(propSource.getSource());
}
System.out.println("Schedules: " + getSchedules());
}
public Map<String, Object> getSchedules() {
return schedules;
}
public void setSchedules(Map<String, Object> schedules) {
this.schedules = schedules;
}
}
Обратите внимание, что с этой опцией вы читаете файл application.properties дважды. Если вы согласны с этим, вы можете выбрать вариант 1. В противном случае вы можете выбрать вариант 2.
Вариант 2:
MyAppConfiguration.java
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAppConfiguration {
}
MyPojo.java
import java.util.Map;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.env.OriginTrackedMapPropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.stereotype.Component;
@Component
public class MyPojo {
@Autowired
private ConfigurableEnvironment env;
private Map<String, Object> schedules;
@PostConstruct
public void properties() {
Object propSourceObj = env.getPropertySources().get("applicationConfig: [classpath:/application.properties]");
if (propSourceObj instanceof OriginTrackedMapPropertySource) {
OriginTrackedMapPropertySource propSource = (OriginTrackedMapPropertySource) propSourceObj;
setSchedules(propSource.getSource());
}
System.out.println("Schedules: " + getSchedules());
}
public Map<String, Object> getSchedules() {
return schedules;
}
public void setSchedules(Map<String, Object> schedules) {
this.schedules = schedules;
}
}
Редактировать:
Извините, ранее я неправильно понял ваш вопрос. Если вы знаете префикс свойства, вы можете использовать @ConfigurationProperties, как показано ниже. Вышеуказанные параметры предназначены для чтения всех свойств без знания префикса свойства.
MyAppConfiguration.java
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAppConfiguration {
@Autowired
private MyCompanyConfigurationProperties myCompanyConfProps;
@PostConstruct
public void testProperteis() {
System.out.println("My Properties: " + myCompanyConfProps.getSchedule());
}
}
MyCompanyConfigurationProperties.java
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "com.mycompany")
public class MyCompanyConfigurationProperties {
private Map<String, String> schedule = new HashMap<String, String>();
public Map<String, String> getSchedule() {
return schedule;
}
public void setSchedule(Map<String, String> schedule) {
this.schedule = schedule;
}
}