Используйте пользовательский файл database.properties только в производстве в загруженном java-проекте maven resthub, работающем в Intellij.

Я использую resthub для начальной загрузки моего веб-приложения Spring-Backbone.

https://github.com/resthub/resthub.github.io/blob/master/docs/spring/layout.md#environment-specific-properties

Согласно https://github.com/resthub/resthub.github.io/blob/master/docs/spring/mongo.md . У них уже есть файл свойств базы данных по умолчанию.

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

Чтобы переопределить свойства базы данных по умолчанию, предоставленные resthub, можно создать файл с именем database.properties в пути к классам. Но я хочу, чтобы этот файл выбирался только для развертывания на героку.

Как мне настроить его так, чтобы он работал локально на Intellij со свойствами db по умолчанию, но использовал базу данных .properties для heroku.

Я уже читал о профилях Maven, но в нем говорится о том, как иметь разные файлы для разных сред, и я ищу, чтобы не иметь конкретного файла для конкретной среды, а вместо этого использовать файл по умолчанию, предоставленный в одном из jar-файлов resthub.

Обновить

Только что прошел Что такое порядок приоритета при наличии нескольких профилей среды Spring, заданных spring.profiles.active

Профиль resthub-mongodb всегда устарел, в случае производства (обозначается -Dprod=true) загружается новый профиль с именем heroku, который, в свою очередь, загружает prod\database.properties

<context:property-placeholder location="classpath*:prod/database.properties"/>

Но я предполагаю, что bean-компоненты, связанные с mongo, уже определены с использованием свойств, определенных в resthub-mongodb, и, следовательно, загрузка загрузки профиля heroku для изменения свойств db не работает.

Какое решение в таком случае?

Возможное решение

На данный момент я использовал один из профилей — heroku или resthub-mongodb в зависимости от свойства системы.

Есть ли другой способ ?


person coding_idiot    schedule 14.11.2014    source источник


Ответы (1)


Вы можете позволить maven обрабатывать ваши среды с конфигурацией ресурсов.

Добавьте в свой pom или родительский pom:

<env>local</env>

...

<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>false</filtering>
    </resource>
    <resource>
        <directory>${basedir}/src/main/config/${env}</directory>
        <filtering>false</filtering>
    </resource>
</resources>

Это позволяет вам предоставлять несколько каталогов конфигурации; по одному для каждой среды: local, heroku...

С помощью этой конфигурации вы сможете предоставить конкретный файл database.properties для вашей среды heroku, сохраняя при этом локально значения по умолчанию для resthub (не предоставляя пользовательские свойства database.properties в config/local):

src/
   main/
       config/
             local/
             heroku/
                   database.properties

Добавление параметра -Denv=heroku к любому запуску команды maven добавит все содержимое каталога config/ в ваш путь к классам. local — это среда по умолчанию, которая используется, если параметр не указан.

person bmeurant    schedule 15.11.2014