@Profile vs @ConditionalOnProperty

时间:2017-10-19 16:49:59

标签: java spring spring-mvc spring-boot profiling

最近我被要求创建一个新的set PATH=%PATH%;c:\Program Files\Wireshark\ start /B tshark -f -i 1 -w file1.pcap 来(de)激活一个功能。我有两种情况需要做出改变:

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; } } 注释的类中添加一个属性,并在启动时将参数传递给tomcat。这样我可以在@Valueif使用thisLineHasNotToBeExecuted() @ConditionalOnProperty及其子项。

我的方法是否正确?

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

您想要使用属性并添加“if”来决定是否执行'thisLineHasNotToBeExecuted();'走在正确的轨道上。如果该行的执行取决于配置文件,则可以将活动配置文件注入到类中并键入该值。如果您使用的是spring boot配置服务器,请确保添加“@RefreshScope”。