Укажите файл зависимых свойств env при сборке maven

Я хороший разработчик Java, но я унаследовал огромный проект J2EE/JSP/Springs/Maven, и я совсем новичок в этом. Мейвен и Спринг и др.

Все, что я хочу сделать, это указать разные файлы .resource, зависящие от env, во время сборки w. что-то типа

mvn install -Dprofile=development

И я хочу, чтобы обычные классы Java загружали этот файл свойств среды во время выполнения. Я не возражаю, если Maven скопирует «application.development.properties» в «application.properties» или в java-файле есть какая-то переменная конфигурации, например

String env=${profile};

or

String env = System.getProperty("profile");

или что-то еще. Я знаю, что есть МНОГО ответов Stackoverflow почти на это, но я провел несколько часов в Google, подойдя очень близко к фрагментам, но ничего, что могло бы собрать все это воедино для меня.

Я понял ОДНУ вещь, которая работает, но она неэлегантна и требует чтения дополнительного файла поддержки. Но на случай, если кому-то это понадобится, и ни у кого нет лучшего ответа:

Вы можете включить properties-maven-plugin и "generate-resources", которые создадут файл свойств со свойствами, определенными в POM.xml. Но вы можете переопределить свойства, определенные в pom, из командной строки, поэтому включите плагин в свой pom:

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>generate-resources</phase> <goals> <goal>write-project-properties</goal> </goals> <configuration> <outputFile> ${project.build.outputDirectory}/envdef.properties </outputFile> </configuration> </execution> </executions> </plugin> и свойство envtype по умолчанию: <properties> <envtype>local</envtype> </properties> Вы можете выполнить сборку, скажем, "mvn -Denvtype=production install" и он создаст файл "envdef.properties" с единственным свойством "envtype" - производственный, локальный, независимо от параметров сборки. Прочтите этот файл свойств, получите тип envtype в своем коде Java, затем прочитайте файл свойств, зависящих от пользовательской среды, на основе значения свойства «envtype».

Как я уже сказал, уродливо, это работает, я надеюсь, что есть лучшее предложение.

Спасибо,

Крис


person ChrisNY    schedule 19.09.2017    source источник
comment
Я думаю, что это та же проблема проверьте этот вопрос   -  person Ricky    schedule 19.09.2017
comment
Взгляните на PropertySource и перечисление PropertySources. Вы можете указать путь к файлу свойств при запуске приложения с флагом -D и использовать решение, предложенное Tejal. Другими словами, сохраняйте файлы свойств внешними для создания и используйте командную строку, чтобы указать на правильный файл.   -  person user871199    schedule 19.09.2017


Ответы (1)


вы можете использовать среду Autowired в своем классе, как указано ниже, а затем вы можете получить значения ее свойств.

@Autowired
private Environment environment;


String jdbcClassName=environment.getRequiredProperty("jdbc.username");
person Tejal    schedule 19.09.2017