Вопрос по java, configuration, maven – Сконфигурируйте Java EE 6 для dev / QA / prod

2

У меня есть приложение Java EE 6, которое я создаю с помощью Maven, код в NetBeans 7 и развертывание на GlassFish 3.1.2. Когда я почти заканчиваю, я обнаруживаю, что развертываю демонстрационные сборки.

Проблема заключается в том, что у меня нет какого-то очень простого способа сборки для другой среды, такой как dev, QA, demo, prod и т. Д. Для некоторых вещей я использовал класс Java с набором статических геттеров, которые возвращают значения основаны на значении постоянной среды. Но это не помогает мне с условной установкой

javax.faces.PROJECT_STAGE (web.xml) database credentials (glassfish-resources.xml) mail servers (glassfish-resources.xml) JPA logging level (persistence.xml)

и, возможно, о многих других вещах, о которых я не могу думать сейчас, которые разбросаны по файлам XML.

Есть ли способ определить несколько версий этих файлов конфигурации и просто установить флаг во время сборки, чтобы выбрать среду, при этом по умолчанию используется значение dev, если среда не указана? Есть ли способ заставить Maven работать на меня в этом случае?

Ваш Ответ

3   ответа
8

специалист чтобы достичь этого. Особенно используяфильтрация ресурсов.

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

  <profiles>
    <profile>
      <id>dev</id>
      <properties>
        <env>development</env>
      </properties>
      <activation>
        <activeByDefault>true</activeByDefault> <!-- use dev profile by default -->
      </activation>
    </profile>
    <profile>
      <id>prod</id>
      <properties>
        <env>production</env>
      </properties>
    </profile>
  </profiles>

Тогда ресурсы, которые нужно отфильтровать:

  <build>
    <outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes</outputDirectory>
    <filters>
      <filter>src/main/filters/filter-${env}.properties</filter> <!-- ${env} default to "development" -->
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

А затем ваши пользовательские свойства на основе профилей вsrc/main/filters каталог:

filter-development.properties

# profile for developer
db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:mem:web

а также

filter-production.properties

# profile for production
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/web?createDatabaseIfNotExist=true

чтобы использовать производственный профиль, вы можете упаковать войну, используяmvn clean package -Pprod команда.

Вот Вы можете увидеть пример проекта, который использует профиль в Maven.

Error: User Rate Limit Exceeded Distortum
Error: User Rate Limit Exceeded Distortum
Error: User Rate Limit Exceeded Distortum
0

проверьте это с практическими рекомендациями: https://community.jboss.org/docs/DOC-19076

Он использует тот же метод (фильтрация ресурсов), как описано в других ответах.

Error: User Rate Limit Exceeded
0

This is not direct response to question. This explain diff strategy to manage env properties ние базы данных для хранения свойств. Таким образом, вам нужно только управлять конфигурацией БД. В зависимости от того, на какую БД вы указываете, вы можете загрузить свойства из этой БД. Если вы используете Spring, то Spring предоставляет PropertyPlaceholderConfigurer, который может инициализировать свойства из БД. Этот подход позволяет изменить значение свойства без выполнения сборки.

Этот подход полезен, если вы хотите продвигать артефакт, протестированный командой QA \ Testing. В этом случае конфигурация БД не будет частью артефакта, сгенерированного процессом сборки.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Distortum
Error: User Rate Limit Exceeded Distortum

Похожие вопросы