Как получить доступ к текущему активному профилю статическим методом?

У меня есть служебный класс с кучей статических методов для обновления сертификатов в хранилище доверенных сертификатов. В статическом методе мне нужно знать имя текущего активного профиля. Поскольку он статический, я не могу передать значение из @Value("${spring.profiles.active:}"). Есть лучший способ сделать это?

Проект находится на Java 11 и Springboot 2.7.

Может быть, вы могли бы использовать аннотацию @Profile, чтобы решить эту проблему?

K0cur 12.06.2024 20:02

Вы можете создать реализацию для каждого профиля с аннотацией @Profile над классом и предоставить ее одному интерфейсу, который представляет функциональные возможности служебного класса, используемые в приложении. Однако я не уверен, что он будет работать со статикой. Наверное, так и должно быть, но я никогда не пробовал.

K0cur 12.06.2024 20:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать сделать что-то вроде этого:

@Компонент публичный класс ProfileUtil реализует ApplicationContextAware {

private static Environment environment;

@Override
public void setApplicationContext(ApplicationContext applicationContext) {
    environment = applicationContext.getEnvironment();
}

public static String getActiveProfile() {
    String[] activeProfiles = environment.getActiveProfiles();
    if (activeProfiles.length > 0) {
        return activeProfiles[0]; // Assuming one active profile
    } else {
        return "default";
    }
}

}

Ответ принят как подходящий

Хорошо, это намного проще, чем я думал. По сути, я просто получил значение в классе, управляемом Spring, а затем передал это значение обратно в служебный класс. Что-то вроде этого:

@Component
class OuterClass{
  private final Environment env;
  
  @Autowired
  public OuterClass(Environment env) {this.env=env;)
  UtilityMethod.staticMethod(env.getActiveProfiles())
}

Другие вопросы по теме