2016-12-03 2 views
3

Spring Ботинок использует порядок PropertySource, который предназначен для обеспечения разумной подмены ценностей, свойства рассматриваются в следующем порядке:Spring Ботинок: Изменить порядок PropertySource

  1. аргументы командной строки.
  2. Свойства из SPRING_APPLICATION_JSON (встроенный JSON, встроенный в переменную среды или системное свойство)
  3. JNDI-атрибуты из java: comp/env.
  4. Свойства Java-системы (System.getProperties()).
  5. Переменные среды ОС.
  6. RandomValuePropertySource, который имеет свойства только в случайном порядке. *.
  7. профиль специфических свойства приложения за пределами вашей упакованной банки (APPLICATION- {профиль} .properties и YAML варианта)
  8. профиля специфических свойств приложения упаковано внутри кувшина (APPLICATION- {профиль} .properties и YAML варианта)
  9. Свойства приложения за пределами вашей упакованной банки (варианты application.properties и YAML).
  10. Свойства приложения, упакованные внутри вашей банки (варианты application.properties и YAML).
  11. @PropertySource аннотации на ваши классы @Configuration.
  12. Свойства по умолчанию (заданные с помощью SpringApplication.setDefaultProperties).

Но мне это не нравится. Как я могу его изменить?

+0

Что бы вы хотели изменить? – Andreas

+0

Я хочу изменить приоритетный порядок. – Tan

+0

Не нашли решения, но вы можете немного поработать по дизайну, особенно если вам требуется определенный порядок обработки источников ресурсов. Поэтому для параметров приложения всегда используйте собственный источник @PropertySource, потому что он сначала проверяет внешний, затем внутренний (чтобы вы могли запускать фиксированные значения по умолчанию и, возможно, переопределять внешний файл). Не смешивайте настройки с application.properties, потому что 9/10 будет соответствовать до 11. – DoNuT

ответ

1

Я нашел способ добиться этого. Открытый исходный код!!!!

App.java (основной метод)

public class App { 
    public static void main(String[] args) { 
     SpringApplicationBuilder builder = new SpringApplicationBuilder(AppConfig.class); 
     SpringApplication app = builder.web(true).listeners(new AppListener()).build(args); 
     app.run(); 
    } 
} 

AppListener.java

public class AppListener implements GenericApplicationListener { 

    public static final String APPLICATION_CONFIGURATION_PROPERTY_SOURCE_NAME = "applicationConfigurationProperties"; 

    @Override 
    public boolean supportsEventType(ResolvableType eventType) { 
     return ApplicationPreparedEvent.class.getTypeName().equals(eventType.getType().getTypeName()); 
    } 

    @Override 
    public boolean supportsSourceType(Class<?> sourceType) { 
     return true; 
    } 

    @Override 
    public void onApplicationEvent(ApplicationEvent event) { 
     if (event instanceof ApplicationPreparedEvent) { 
      ApplicationPreparedEvent _event = (ApplicationPreparedEvent) event; 
      ConfigurableEnvironment env = _event.getApplicationContext().getEnvironment(); 

      // change priority order application.properties in PropertySources 
      PropertySource ps = env.getPropertySources().remove(APPLICATION_CONFIGURATION_PROPERTY_SOURCE_NAME); 
      env.getPropertySources().addFirst(ps); 
      // logging.config is my testing property. VM parameter -Dlogging.config=xxx will be override by application.properties 
      System.out.println(env.getProperty("logging.config")); 
     } 
    } 

    @Override 
    public int getOrder() { 
     return 0; 
    } 
} 
Смежные вопросы