首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Profile vs @ConditionalOnProperty

@Profile vs @ConditionalOnProperty
EN

Stack Overflow用户
提问于 2017-10-20 00:49:59
回答 1查看 1.8K关注 0票数 1

最近,我被要求创建一个新的profile来(取消)激活一个特性。在两种情况下,我必须进行更改:

代码语言:javascript
复制
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")

代码语言:javascript
复制
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);
        }

    }

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

代码语言:javascript
复制
class C {

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

}

不需要执行的代码行取决于方法的其余部分使用的变量,而不是返回的变量。对于这种情况,我之前提出的方法并不是令人满意的方法(有两个方法正在调用这个尚未执行的方法)。

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

我的方法正确吗?

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-10-20 02:56:40

您可以在第一种情况下使用配置文件。

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

您使用属性并添加"if“来决定是否执行”thisLineHasNotToBeExecuted();“的想法是正确的。如果这一行的执行依赖于概要文件,那么您可以将活动概要文件注入到类中,并关闭该值。如果您使用的是spring boot配置服务器,那么一定要添加一个"@RefreshScope“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46835008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档