К моему удивлению, мне было трудно найти ответ на этот вопрос. Я видел много примеров, где вы можете использовать @PropertySource для загрузки определенного файла свойств для класса. Я также видел примеры, в которых вы можете легко добавить разные файлы свойств в spring загрузочных проектах. Но я хочу сделать это для проекта spring, который НЕ является spring загружать и загружать файл свойств, чтобы значения этого файла могли быть введены в классы, аннотированные @Component, которые зависят от сервера Окружающая среда. Так, например, если я на сервере разработки, я хочу, чтобы файл определенных свойств загружался и в процессе создания другого файла свойств. Причина, по которой я делаю это, заключается в том, что мои уровни данных и обслуживания являются их собственными модулями. Эти модули содержат свои собственные модульные тесты и могут быть импортированы как их собственные модули в другие проекты загрузки spring. Мне нужны файлы свойств для загрузки этих модулей, которые используют spring, но не spring boot. Я пробовал следующее, но это не работает.
@Configuration
@Profile("test")
@EnableJpaRepositories("com.hi.repository")
@EnableTransactionManagement
@EnableScheduling
public class InfrastructureConfig {
...
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
Map<String, String> env = System.getenv();
String propertiesFile=null;
String e = env.get("SERVER_ENV");
if (e.equals("dev")) {
propertiesFile = "environment/development.properties";
} else if (e.equals("prod")) {
propertiesFile = "environment/production.properties";
}
configurer.setLocation(new ClassPathResource(propertiesFile));
return configurer;
}
Тогда у меня есть тест, который выглядит как
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring/DealServiceTest-context.xml"})
@ActiveProfiles("test")
public class LogTest {
private static final Logger log = LogManager.getLogger(LogTest.class);
@Autowired
PathsService pathsService;
@Autowired
Environment environment;
@Test
public void testBeans(){
System.out.println("********** WASSUP from LogTest");
System.out.println(environment.getProperty("imageBucket"));
}
Несмотря на то, что в тесте выводится значение null, которое указывает мне, что файл свойств не был загружен и подготовлен для его значений, которые нужно ввести. Как я могу достичь этого?