2016-12-01 2 views
2

Я использую весеннюю загрузку 1.4.2 и теперь пытаюсь установить свойства.Spring Boot как установить spring.config.location в application.properties для yaml

У меня есть четыре дела об использовании .properties и .yml к внешнему (внутри ресурсам) и локальной файловой системы (вне папки проекта).

.properties внешний (внутри папки ресурсов) хорошо работает как @value ($ {property.name}) и @PropertySource последнее использование значение атрибута можно загрузить из файловой системы, как показано ниже.

@Component 
@PropertySource(value="file:C:\\properties\\application-dev.properties") 
@PropertySource(value="file:C:\\properties\\application-test.properties") 
public class ExternalProperties { 
    // ... 
} 

Но .yml не то, что хорошо работает в папке ресурсов, когда имя файла «application.yml»

.yml может быть загружен @ConfigurationProperties и необходимости «propdeps-плагин»

мой .yml файл

environments: 
    dev: 
     url: http://dev.bar.com 
     name: Developer Setup 
    prod: 
     url: http://foo.bar.com 
     name: My Cool App 

Этот код работает хорошо

@Component 
// external(inside resources) 
@ConfigurationProperties(prefix="environments") 
// outside project folder 
@ConfigurationProperties(locations={"file:C:\\properties\\application.yml"}, prefix = "environments") 
public class YamlProperties { 

    private Map<String, String> dev = new HashMap<>(); 
    private Map<String, String> prod = new HashMap<>(); 

    public Map<String, String> getDev() { 
     return this.dev; 
    } 

    public Map<String, String> getProd() { 
     return this.prod; 
    } 
} 

Этот код имеет проблему устаревшего атрибута места (я читал много статей, но не могу понять, ясно), поэтому мне нужно найти API документ и найти «ConfigFileApplicationListener» из этого section.

# SPRING CONFIG - using environment property only (ConfigFileApplicationListener) 
spring.config.location= # Config file locations. 
spring.config.name=application # Config file name. 

Так напишите выше свойства на application.properties, как это.

spring.config.location=file:C:\\properties\\application.yml 
spring.config.name=application 

и перезагрузки .yml свойство (я не пытался банка преобразования приложений. Я использую войну и тест через контроллер)

@Component 
@ConfigurationProperties(prefix="environments") 
public class YamlProperties { 

    private Map<String, String> dev = new HashMap<>(); 
    private Map<String, String> prod = new HashMap<>(); 

    public Map<String, String> getDev() { 
     return this.dev; 
    } 

    public Map<String, String> getProd() { 
     return this.prod; 
    } 
} 

Этот код не нагрузить .yml из локального файла система C: диск, но при добавлении файла application.yml в папку ресурса работает хорошо.

Так как установить spring.config.location для нагрузки .yml

И я хочу знать, почему атрибут место работы еще хотя устаревшим, начиная с 1.4 вер.

и интересно, как использовать ConfigFileApplicationListener. Я не могу отслеживать код, который трудно понять, дайте подсказку ~!

EDIT:

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

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

Почему я продолжаю пробовать эту работу, я использую публичную учетную запись github и защищаю connect db info something else to. Я получаю этот материал и продолжаю следующий вопрос вроде git-encrpt, spring-cloude, nginx, docker. Спасибо за любую помощь действительно полезно.

+0

Лучше попробуйте настройку 'bootstrap.yml' и укажите любую конфигурацию, которую вы хотите там. Например, 'spring.config.location'. Если вы используете 'bootstrap.yml', обратите внимание на добавление зависимости' org.springframework.cloud: spring-cloud-context'. Для простоты 'spring-cloud-context' автоматически загрузит' bootstrap.yml' и конфигурации, которые также могут быть загружены автоматически. Другой способ сделать это - указать из аргументов командной строки, таких как '-Dspring.config.location =' или просто '--spring.config.location ='. Аргументы в прежнем формате должны появляться перед опцией '-jar'. –

+0

Как правило, расширение 'yml' обычно используется и хорошо известно в весеннем каркасе, а не' yaml'. И самый простой способ добиться этого - называть ваш загрузочный файл конфигурации как 'bootstrap.yml' в вашей папке' resources'. Пример [https://github.com/soiff-spring/spring-boot-example.git](https://github.com/soiff-spring/spring-boot-example.git) может помочь. –

+0

спасибо за информацию о весенних облаках Я попробую сделать следующий шаг и обновить имя yaml до yml, но все равно не работает. спасибо за новую информацию @GeminiKeith –

ответ

1

Поскольку вы используете весенний ботинок 1.4.2, все просто. Вам просто нужно указать дополнительный аргумент для вашего приложения, например java -jar name-of-application-version.jar --spring.config.location=file:///C:/properties/application.yml. Более общий метод для этого - определение дополнительной опции для JVM, например, java -Dspring.config.location=file:///d:/private-bootstrap.yml -jar name-of-application-version.jar. Оба этих метода могут работать, потому что они отлично работают на моем рабочем столе.

+0

Благодарим за помощь @ GeminiKeith Как насчет военной ситуации? Отличается ли это от реального развертывания до tomcat? Фактически я использую публичный github, также я знал любое другое хорошее решение здесь, но попробуйте первые простые способы. После создания файла войны он содержит компонент, который содержит информацию о свойствах в локальной файловой системе. Как о файле jar сохранить информацию, которая вводится из командной строки? Я только что понял, что было использовано для развития ситуации. –

+0

У меня есть пропущенное понимание моего комментария, это была обновленная информация о свойствах контекста при перезапуске tomcat. поэтому в банке, войне нет сохранения постоянной информации контекста. Я хочу пояснить, что я упоминаю. @GeminiKeith –

+0

Это на самом деле работа для войны, которая будет развернута под tomcat. Однако, если вы хотите сохранить свою конфигурацию и сделать ее доступной после запуска, вам нужно сделать гораздо больше работы. И это не так просто, как вы думаете, вам лучше разместить ваше требование в качестве еще одного вопроса для обсуждения. Хорошим решением является конфигурация весеннего облака. Таким образом, вам не нужно указывать столько параметров в аргументах, а не указывать их в [spring cloud config] (http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html). –

Смежные вопросы