Spring MVC Aspect条件

时间:2018-08-29 19:35:09

标签: spring-mvc 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 :(得分:0)

一种选择是使用Spring Profiles。这依赖于Spring的Environment抽象,并允许您指示在哪种环境中要使用哪些组件-即,基于给定的 profile active 环境。

文档为here(对于Spring Boot,为here)。但实际上,您可以使用@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环境属性。如果配置文件注释的类与该属性的值匹配,则将选择它们:

spring.profiles.active=dev