Применить @EnableJms условно в Springboot - PullRequest
1 голос
/ 08 апреля 2020

Учитывая следующее приложение весна / загрузка.

@SpringBootApplication
@Configuration
@ComponentScan
@EnableGlobalMethodSecurity(
        prePostEnabled = true,
        securedEnabled = false,
        jsr250Enabled = false)

@EnableJms // we would like to control this from an application property on/off
public class PayZilchCustomerServiceApplication {
    static {
        SSLUtilities.trustAllHostnames();
        SSLUtilities.trustAllHttpsCertificates();
    }
    public static void main(String[] args) {
        SpringApplication.run(PayZilchCustomerServiceApplication.class, args);
    }
}

Мы находим, что для некоторых локальных сценариев отладки ios мы хотим, чтобы @EnableJms был выключен. Мы закомментируем строку кода. Мы иногда создаем PR (ы) с прокомментированной строкой. PR перехватывается проверкой кода.

Это ускользнет через один день. Как мы контролируем @EnableJms из файла свойств приложения, желательно чтобы он был включен по умолчанию, но может быть отключен с помощью записи application-local.properties.

1 Ответ

4 голосов
/ 08 апреля 2020

Создайте новый класс и отметьте его следующими 3 аннотациями:

@Configuration
@EnableJms
@ConditionalOnProperty(name = "turnonjms", havingValue = "true")
public class MyEnableJmsCustomConfig {
   //you can keep it empty. Just make sure this class
   //is present in the same folder where main class is
}

Вы передадите свойство turnonjms из внешних источников, таких как аргументы времени выполнения --turnonjms=true или -Dturnonjms. Если он присутствует, только тогда @EnableJms будет активным. В противном случае он будет отключен.

Или, если хотите, вы всегда можете включить JMS и отключить его только при наличии определенного внешнего свойства:

@ConditionalOnProperty(name = "turoffjms", havingValue = "false")

Если вы не 't передать turnoffjms свойство из внешних источников, тогда у вас всегда будет включен JMS. Если вы передадите --turnoffjms=true, JMS будет отключен.

В примечании, когда вы используете @SpringBootApplication, в нем уже есть аннотации @configuration и @ComponentScan. Вы можете использовать @ComponentScan, если хотите сканировать папки вне текущего пакета. EnableGlobalMethodSecurity(...) также имеет встроенный @Configuration, поэтому можно безопасно удалить эти две аннотации из вашего основного класса.

Редактировать:

Поскольку вы уже используете application-local.properties, вставьте эту запись, чтобы отключить его:

turnoffjms: true # поставить true в двойные кавычки, если он не работает

...