当前位置: 首页 > 面试题库 >

当多个配置文件不活动时,如何有条件地声明Bean?

徐昕
2023-03-14
问题内容

在我的Spring-Boot-App中,我想根据(未加载的)spring-profiles有条件地声明一个Bean。

条件:

Profile "a" NOT loaded  
AND  
Profile "b" NOT loaded 

到目前为止,我的解决方案(有效):

@Bean
@ConditionalOnExpression("#{!environment.getProperty('spring.profiles.active').contains('a') && !environment.getProperty('spring.profiles.active').contains('b')}")
    public MyBean myBean(){/*...*/}

有没有更优雅(更短)的方式来解释这种情况?
特别是我想在这里摆脱Spring Expression Language的使用。


问题答案:

从Spring 5.1.4(Spring Boot 2.1.2中包含)开始,可以在配置文件字符串注释内使用配置文件表达式。所以:

在Spring 5.1.4(Spring Boot 2.1.2)及更高版本中,它很简单:

@Component
@Profile("!a & !b")
public class MyComponent {}


 类似资料:
  • 我有一个用maven作为构建工具的应用程序。 我正在使用maven概要文件从不同的概要文件设置不同的属性。 假设我运行带有out的maven,并指定我希望spring的任何其他概要文件,将和作为活动概要文件。

  • 问题内容: 有没有一种方法可以有条件地声明Spring bean: 不必使用配置文件,这将很有用。我没有特定的用例,但这是我想到的。 问题答案: 你可以使用@Conditional从spring4或@ConditionalOnProperty从springBoot.。 Using Spring4 (only) 如果你不使用Spring Boot,这可能会过大。 首先,创建一个类,在其中可以访问:

  • 我有5个环境: 我希望对每个环境使用不同的应用程序属性,因此我有以下属性文件,每个属性文件都有不同的数据源URL: 我正在使用IntelliJ并在本地机器上的Gradle插件中使用bootRun运行我的应用程序。我将使用在运行Tomcat的所有其他环境中部署相同的应用程序war文件。 我尝试添加: --spring.profiles.active=local 到脚本参数下的运行配置。 我尝试添加

  • 我有一个包含application.yml的spring boot应用程序。 application.yml内容: 应用程序的内容-private.yml: 根据我的理解,integrations:ecom:api-url是从application-private.yml加载的,即使默认概要文件也有相同的属性。 如果两个配置文件处于活动状态,是否将按照指定配置文件的顺序加载和使用属性? 我的订单:

  • 这篇指南的目的是教你如何书写高质量的TypeScript声明文件。 在这篇指南里,我们假设你对TypeScript已经有了基本的了解。 如果没有,请先阅读TypeScript手册 来了解一些基本知识,尤其是类型和命名空间部分。 这篇指南被分成了以下章节。 结构 结构一节将帮助你了解常见库的格式以及如何为每种格式书写正确的声明文件。 如果你在编辑一个已经存在的文件,那么你可能不需要阅读此章节。 如果