Spring MVC Aspect Conditional - PullRequest
       7

Spring MVC Aspect Conditional

0 голосов
/ 29 августа 2018

У меня работает Aspect для ведения журнала с пользовательской аннотацией @Loggable. Я хочу, чтобы аспект работал только тогда, когда он находится в тестовой среде. поэтому я попытался получить пару ключ-значение в файле application.yaml.

Но условие не работает. Пожалуйста, помогите мне

Ниже приведен код:

@Aspect
@Component
@ConditionalOnExpression("${test.enable_loggable:true}")
public class LoggingAspect {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Around("@annotation(Loggable)")
public Object around(ProceedingJoinPoint point) {
  long start = System.currentTimeMillis();
}

Мой конфиг:

test:
    enable_loggable: true

Я также пробовал при следующих условиях:

@ConditionalOnExpression("'${test.enable_loggable}' == 'local'")
@ConditionalOnExpression("${test.enable_loggable:false}")

Ничего не работает

1 Ответ

0 голосов
/ 29 августа 2018

Один из вариантов - использовать Spring Profiles. Это основано на абстракции среды Spring и позволяет указать, какие компоненты должны использоваться в какой среде, т. Е. На основе каких профилей являются активными в данном окружающая среда.

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

@Configuration
@Profile("dev")
@Aspect
@Component
@ConditionalOnExpression("${test.enable_loggable:true}")
public class LoggingAspect {

private final Logger logger = LoggerFactory.getLogger(this.getClass());
  @Around("@annotation(Loggable)")
  public Object around(ProceedingJoinPoint point) {
    long start = System.currentTimeMillis();
  }
}

Идея в том, что вы можете сделать bean-компоненты "осведомленными об окружающей среде". Например, в зависимости от того, где запущено приложение, будут выбраны соответствующие классы конфигурации (например, «dev», «staging», «prod» или все, что вы укажете).

Как описано в документации, существует несколько способов активировать профиль. Но, пожалуй, самым простым является использование свойства spring.profiles.active Environment. Аннотированные классы профиля будут выбраны, если они соответствуют значению этого свойства:

spring.profiles.active=dev
...