最近,我被要求创建一个新的profile来(取消)激活一个特性。在两种情况下,我必须进行更改:
class A {
public void configure(AuthenticationManagerBuilder auth) throws Exception {
SecurityConfigurer ldapConfigurer = securityFactory.ldapAuthenticationProviderConfigurer();
ldapConfigurer.configure(auth);
SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer();
offlineConfigurer.configure(auth);
}
}在上面的类中,如果配置文件是活动的,则不需要执行最后两行。我扩展了这个类,并为它分配了新的概要文件@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。
我的方法正确吗?
更多信息:当我们使用ActiveDirectory时,我正在(取消)激活故障转移身份验证,在第二个类中,我阻止将用户信息保存在缓存中。
谢谢!
发布于 2017-10-20 02:56:40
您可以在第一种情况下使用配置文件。
“@ConditionalOnProperty”不是处理第二个用例的正确方法。它通常用于Spring Boot Starter项目的启动配置。
您使用属性并添加"if“来决定是否执行”thisLineHasNotToBeExecuted();“的想法是正确的。如果这一行的执行依赖于概要文件,那么您可以将活动概要文件注入到类中,并关闭该值。如果您使用的是spring boot配置服务器,那么一定要添加一个"@RefreshScope“。
https://stackoverflow.com/questions/46835008
复制相似问题