- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我被要求创建一个新的配置文件
来(取消)激活一项功能。我有两种情况必须做出改变:
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/
我想做这样的事情: @ConditionalOnProperty("${${appname}.someVal}") @Controller public class MyController {...
有什么方法可以使用基于多值属性的@ConditionalOnProperty注解吗? Spring 配置: @Bean @ConditionalOnProperty(name = "prop", ha
我正在使用 Spring Boot 1.4.3 @AutoConfiguration,我根据用户指定的属性自动创建 bean。用户可以指定一组服务,其中名称和版本是必填字段: service[0].n
刚刚修改了spring boot的配置,遇到了 @ConditionalOnProperty(prefix = "spring.social.", value = "auto-connection-v
最近,我被要求创建一个新的配置文件来(取消)激活一项功能。我有两种情况必须做出改变: class A { public void configure(AuthenticationManager
我有如下代码: @Scheduled(cron = "${cron.foo.bar}") @ConditionalOnProperty(name="cron.foo.bar.enabled", rel
我有两个取决于配置变量的类: @Component @ConditionalOnProperty("config.db") public class DatabaseTokenStore implem
我们有一个带有一些数据库实体类的 Spring-Boot 应用程序。 我们使用 ddl-auto: validate 来确保连接的数据库具有正确的架构。 现在我们要添加一个可以切换以匹配不同环境的功能
ConditionalOnProperty 似乎只适用于类路径中的属性,例如资源文件夹中的 application.properties。我需要一个最终用户可以通过外部属性打开和关闭的属性。一个例子非
我按照网上找到的教程使用 @ConditionalOnProperty 和 @Bean 来选择 @Autowired 的实现。 为了完整起见(尽管与问题无关),这样做的目的是选择一个“ICE 服务器列
我在属性文件中定义了一个属性:property=true 然后我有 SomeClass.java 类,如果属性 property 设置为真。 这是我的 SomeClass 类: public clas
我们有一个执行状态检查的@Scheduled 进程。但由于它在一组服务器上运行并为每个服务器提供相同的信息,我们得到了 5 条冗余消息。 为了解决这个问题,我发现了 @ConditionalOnPro
我有 2 个 bean : @Component("CryptoClient") @ConditionalOnProperty(name = "enabled-client", havingValue
当我设置 use.liquibase 为 true 时,我想加载 liquibase 属性并启动 H2 数据库。在所有其他情况下,我想转到相应的 RDBMS 实例。我有这样的代码 @PropertyS
目前,我在基于 applications.yaml 文件中的 String 属性创建 dataSource bean 时遇到问题。 理想情况下,我只想在 application.yaml 文件中设置了
我有 2 个 bean : @Component("CryptoClient") @ConditionalOnProperty(name = "enabled-client", havingValue
我有一个组件,我可以从 Spring Boot 应用程序中的 applikation.properties 启用/禁用它。 在我的 application.properties 中我有 wiki.en
如果存在属性,我想触发特定的计划函数。 我的属性如下: tasks: task1: interval: "* * * ? * *" task2: int
假设我们有以下代码: @SpringBootApplication @ConditionalOnProperty(value = "scheduling.enable") @EnableSchedul
我可以用@Autowired Spring 4.x @Component s 带有 @ConditionalOnProperty基于featuretoggles.properties 文件选择功能的实
我是一名优秀的程序员,十分优秀!