如果活动配置文件与正则表达式关键字匹配,如何有条件地在 Spring 中启用 class?
How to conditionally enable a class in Spring if active profile matches a regex keyword?
我有一个 Spring 引导控制器,我只想在某些配置文件处于活动状态时启用它。但是,我不想对所有这些配置文件进行硬编码,而是想使用正则表达式或其他方式来执行此操作。
考虑这段代码
@Controller
@Profile("#{'spring.profiles.active' matches 'eu'}") // this line is not working
public class HomeController{
// ... removed other code for brevity
}
现在我希望仅当活动配置文件属于以下内容时才启用此控制器:dev1_eu, dev2_eu, dev3_eu, qa1_eu, qa2_eu, qa3_eu, prod1_eu, prod2_eu, prod3_eu, test1_eu, test2_eu
etc。 “Etc”是这里的关键字。我有更多配置文件,其中都有 eu
,我希望仅在此类 *eu*
配置文件中启用上述控制器。现在有这么多配置文件是否是一个好的做法还有待商榷,但假设这不能改变(即配置文件的数量不能减少)。因为如果配置文件的数量较少,我可能会这样做:
@Profile({"dev_eu","qa_eu","prod_eu"})
人们会怎么做呢?如果 @Profile 不是这种方式,还有哪些其他 cleaner/easy 方法可以实现这一点?
你可以试试@ConditionalOnExpression
@ConditionalOnExpression(value = "#{ '${spring.profiles.active}' matches 'pattern' }")
我有一个 Spring 引导控制器,我只想在某些配置文件处于活动状态时启用它。但是,我不想对所有这些配置文件进行硬编码,而是想使用正则表达式或其他方式来执行此操作。
考虑这段代码
@Controller
@Profile("#{'spring.profiles.active' matches 'eu'}") // this line is not working
public class HomeController{
// ... removed other code for brevity
}
现在我希望仅当活动配置文件属于以下内容时才启用此控制器:dev1_eu, dev2_eu, dev3_eu, qa1_eu, qa2_eu, qa3_eu, prod1_eu, prod2_eu, prod3_eu, test1_eu, test2_eu
etc。 “Etc”是这里的关键字。我有更多配置文件,其中都有 eu
,我希望仅在此类 *eu*
配置文件中启用上述控制器。现在有这么多配置文件是否是一个好的做法还有待商榷,但假设这不能改变(即配置文件的数量不能减少)。因为如果配置文件的数量较少,我可能会这样做:
@Profile({"dev_eu","qa_eu","prod_eu"})
人们会怎么做呢?如果 @Profile 不是这种方式,还有哪些其他 cleaner/easy 方法可以实现这一点?
你可以试试@ConditionalOnExpression
@ConditionalOnExpression(value = "#{ '${spring.profiles.active}' matches 'pattern' }")