2015-02-04 3 views
1

Я ищу решение этой проблемы.Особые внешние свойства специального приложения для загрузки весны

У меня есть несколько файлов свойств (application.properties, application-realdb.properties). Скажем, я начинаю с весеннего профиля «realdb». Теперь я хочу переопределить свои свойства при развертывании на tomcat. Я решил поместить файл в папку/lib, так как он автоматически находится в пути к классам, и я не нашел лучшего (например, для конкретной папки класса пути)

Поэтому я могу разместить там application.properties, который будет работать так долго так как у меня будет только одно приложение. В случае, если у меня есть несколько приложений загрузки с весной, я хотел бы назвать этот файл (ПРИМЕЧАНИЕ: назначение приложений конкретным)

  • Я могу использовать приложение. конкретный профиль пружины и добавить /lib/application-appname.properies, который включает в себя необходимость передать правильный профиль

  • Я могу использовать --spring.config.name, что мне тоже не нравится пропустить его в командной строке (я не знаю о возможности сделать это в файле войны, может быть, установить системное свойство в основном классе загрузки весной?)

  • в @ConfigurationProperties (locations = "classpath: appname.properties , префикс ... "он работает так, как я хочу, чтобы он был правильно обработан, но только для класса, в котором я привязываю значения.

S um up: Есть ли способ, как копировать специально названный файл в pathpath и, таким образом, переопределять application.properties ????

ОБНОВЛЕНО Предлагаемое решение работает теперь я могу использовать другое имя свойства, но я до сих пор есть проблемы с загрузкой файлов, в пути к классам снаружи.

Adding [applicationConfig: [classpath:/my-app-realdb.properties]] PropertySource with search precedence immediately lower than [applicationConfigurationProperties] 
Adding [applicationConfig: [classpath:/config/my-app.properties]] PropertySource with search precedence immediately lower than [applicationConfig: [classpath:/my-app-realdb.properties]] 
Adding [applicationConfig: [classpath:/my-app.properties]] PropertySource with search precedence immediately lower than [applicationConfig: [classpath:/config/my-app.properties]] 

последний находится в .WAR, я Quess Lib папка// конфигурации должны иметь преимущественную силу

3. A classpath /config package 
4. The classpath root 

Так охота ответа еще на

UPDATE2 Looks как заказ:

1. /config/application-<profile_specific>.properties 
2. /application-<profile_specific>.properties 
3. /config/application.properties 
4. /application.properties 

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

ответ

7

Вы можете настроить spring.config.name свойства в главном классе, либо в методе main при работе в качестве исполняемого архива или в configure методе, когда развертываются как война. Например:

@SpringApplication 
public class SampleApplication extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(SampleApplication.class) 
      .properties("spring.config.name:my-app"); 
    } 

    public static void main(String[] args) throws Exception { 
     new SpringApplicationBuilder(SampleApplication.class) 
      .properties("spring.config.name:my-app").build().run(args); 
    } 

} 

С этим изменением в месте загрузки будет искать файлы с именем my-app.properties и my-app-{profile}.properties.

+0

Это точно такой же результат, который я узнал, так или иначе мне нравится этот синтаксис _properties («spring.config.name:my-app») _ больше, чем прохождение Карты, спасибо! – Zveratko

+0

Странная вещь, она не может читать мое приложение.свойства из /lib/my-app.properties, я также попробовал application.properties. Ничего. Возможно, это решение что-то тормозит: -/ – Zveratko

+0

Я подозреваю, что вы неправильно поняли, как работает классная загрузка Tomcat. Если у вас есть файл my-app.properties в вашем военном файле, размещение файла с тем же именем в каталоге lib Tomcat не будет отменять его, поскольку Tomcat сначала смотрит в военный файл и только смотрит в lib, если он ничего не находит на войне. Вы можете изменить это поведение и сначала просмотреть его в lib, установив 'delegate = true' в загрузчик класса веб-приложения. См. Http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html для получения дополнительной информации. –