我正在运行带有自定义注释@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}")
没有任何作用
答案 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