2016-09-21 4 views
0

У меня есть проект Spring, который выполняется локально во время фазы разработки/отладки, , а при его производстве он будет загружен на PaaS.Spring Boot условная компиляция/конфигурация

Моя проблема в том, что есть определенная инструкция, которая должна выполняться в зависимости от платформы!

В настоящее время я проверяю логическое (с помощью @ConfigurationProperties), что я читал из application.properties, но мне интересно, если есть более разумный способ, потому что я также изменить логическое значение, когда я нажимаю на производстве.

+0

Какие «инструкции»? Вы имеете в виду, что свойства конфигурации отличаются между envs или вам нужно выполнить какой-либо фактический код в зависимости от env? – rorschach

+1

Вы можете попробовать весенние профили. –

ответ

1

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

I предположим, что ваш код выглядит примерно так, и Logic родник управляемый компонент:

@Component 
public class Logic { 
    public void doIt() { 
     doMoreLogic(); 
     if (yourProperty == true) { 
      your(); 
      certain(); 
      instructions(); 
     } 
     doWhateverYouWant(); 
    } 
} 

Если извлечь определенную логику в классе, то вы можете сделать это более объектно-ориентированный путь:

public interface PlatformDependentLogic { 
    void platformInstructions(); 
} 

@Component @Profile("dev") 
public class DevLogic implements PlatformDependentLogic { 
    public void platformInstructions() { 
     your(); 
     certain(); 
     instructions(); 
    } 
} 
@Component @Profile("!dev") 
public class NoopLogic implements PlatformDependentLogic { 
    public void platformInstructions() { 
     // noop 
    } 
} 

Теперь вы можете ссылаться на логику, делая это в Logic боба:

@Component 
public class Logic { 
    private @Autowired PlatformDependentLogic platformLogic; 
    public void doIt() { 
     doMoreLogic(); 
     platformLogic.platformInstructions(); 
     doWhateverYouWant(); 
    } 
} 

Конечно, вы можете использовать загрузку пружинный конкретных @ConditionalOnProperty вместо @Profile аннотацию, как это:

@ConditionalOnProperty(name="your.property", hasValue="dev") 

Чтобы получить лучшее понимание этой аннотации и как workds вы должны прочитать official documentation of @ConditionalOnProperty