У меня есть служебный класс с кучей статических методов для обновления сертификатов в хранилище доверенных сертификатов. В статическом методе мне нужно знать имя текущего активного профиля. Поскольку он статический, я не могу передать значение из @Value("${spring.profiles.active:}")
. Есть лучший способ сделать это?
Проект находится на Java 11 и Springboot 2.7.
Вы можете создать реализацию для каждого профиля с аннотацией @Profile над классом и предоставить ее одному интерфейсу, который представляет функциональные возможности служебного класса, используемые в приложении. Однако я не уверен, что он будет работать со статикой. Наверное, так и должно быть, но я никогда не пробовал.
Вы можете попробовать сделать что-то вроде этого:
@Компонент публичный класс 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())
}
Может быть, вы могли бы использовать аннотацию @Profile, чтобы решить эту проблему?