gpt4 book ai didi

java - @Profile 与 @ConditionalOnProperty

转载 作者:行者123 更新时间:2023-12-02 12:06:58 24 4
gpt4 key购买 nike

最近,我被要求创建一个新的配置文件来(取消)激活一项功能。我有两种情况必须做出改变:

class A {

public void configure(AuthenticationManagerBuilder auth) throws Exception {
SecurityConfigurer ldapConfigurer = securityFactory.ldapAuthenticationProviderConfigurer();
ldapConfigurer.configure(auth);
SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer();
offlineConfigurer.configure(auth);
}

}

在上面的类中,如果配置文件处于 Activity 状态,则不必执行最后两行。我扩展了该类并为其分配了新的配置文件 @Profile("notOffline") ,并在原始类中放置了 @Profile("!notOffline")

class A {

public void configure(AuthenticationManagerBuilder auth) throws Exception {
SecurityConfigurer ldapConfigurer = securityFactory.ldapAuthenticationProviderConfigurer();
ldapConfigurer.configure(auth);
SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer();
offlineConfigurer.configure(auth);
}

}

class B extends A {
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
super();
SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer();
offlineConfigurer.configure(auth);
}

}

我必须重构的第二个地方是这样的:

class C {

public Something foo() {
code();
code();
code();
thisLineHasNotToBeExecuted();
code();
code();
return something;
}

}

不必执行的行取决于方法其余部分使用的变量,并且它不是返回的内容。对于这种情况,我之前采取的方法并不令人满意(并且有两个方法正在调用不必执行的此方法)。

过了一段时间,我意识到更好的方法是向最后一个类添加一个属性,该属性用 @Value 注释,并在启动时将参数传递给 tomcat。这样我就可以在 thisLineHasNotToBeExecuted() 中有一个 if,并且可以在 class A 及其上使用 @ConditionalOnProperty child 。

我的方法正确吗?

更多信息:当我们使用 ActiveDirectory 时,我正在(取消)激活故障转移身份验证,并且在第二类中,我正在阻止将用户信息保存在缓存中。

谢谢!

最佳答案

您在第一种情况下使用配置文件是合适的。

@ConditionalOnProperty 不是处理第二个用例的正确方法。它通常用于 Spring Boot Starter 项目的启动配置。

您使用属性并添加 if 条件来决定是否执行 thisLineHasNotToBeExecuted(); 的想法是正确的。如果这一行的执行取决于配置文件,那么您可以将 Activity 配置文件注入(inject)到类中并关闭该值。如果您使用的是 spring boot 配置服务器,请务必添加 @RefreshScope

关于java - @Profile 与 @ConditionalOnProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46835008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com