@Profile
不能用于此,但您不妨编写自己的@RunOnProfile
注释和方面。您的方法如下所示:
@RunOnProfile({"dev", "uat"})
public void doSomething() {
log.info("I'm doing something on dev and uat");
}
或者
@RunOnProfile("!prod")
public void doSomething() {
log.info("I'm doing something on profile other than prod");
}
这是@RunOnProfile
注释和方面的代码:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RunOnProfile {
String[] value();
@Aspect
@Configuration
class RunOnProfileAspect {
@Autowired
Environment env;
@Around("@annotation(runOnProfile)")
public Object around(ProceedingJoinPoint joinPoint, RunOnProfile runOnProfile) throws Throwable {
if (env.acceptsProfiles(runOnProfile.value()))
return joinPoint.proceed();
return null;
}
}
}
注意 1:如果您期望得到回报并且配置文件不适用,您会得到null
.
注意 2:这项工作与任何其他 Spring 方面一样。您需要调用自动装配的 bean 方法,以便 bean 代理启动。换句话说,您不能直接从其他类方法调用该方法。如果需要,您需要在类上自动装配组件并调用self.doSomething()
.