当前位置: 首页 > 知识库问答 >
问题:

根据application.yml中的属性注入Spring Boot

宰父浩漫
2023-03-14

在我们项目的一个公共库中,我需要根据使用它的服务来区分一个接口的两个实现。

我通过构造函数注入来注入这个接口,并且需要找出如何根据我们的application.yml中的属性值来确定使用什么实现。

我查看了@Qualifier注释,但它似乎确实需要xml模式中的一个属性。我们没有这样的东西。

在我们代码的一部分中,我们以这种方式读出KafkaListener的属性

@KafkaListener(topics = "#{PathToProperties.getPrefix()}#OurBusinessProperties.getRelevantProperties()}" 

我可以在Spring中使用相同的语法吗?

共有1个答案

冀耀
2023-03-14

在我们项目的一个公共库中,我需要根据使用什么服务来区分接口的两个实现。

您可以使用配置文件来执行此操作。

假设您有两个配置文件:生产和测试。

然后,您可以像这样注释您想要在生产中使用的实现:

@Profile("production")
@Component
class ProductionImplementation implements MyService {
}

并在另一个组件上设置不同的配置文件:

@Profile("test")
@Component
class TestImplementation implements MyService {
}

然后使用以下参数启动您的spring-boot应用程序:

-Dspring.profiles.active=production

或者,您可以使用环境变量选择配置文件:

SPRING_PROFILES_ACTIVE = production

另一个选择是创建一个工厂,该工厂将根据某些环境配置创建不同的实例:

@Bean
public MyService myService() {
  if (condition) return FirstImplementation();
  return SecondImplementation();
}
 类似资料:
  • 我引用了Spring boot-inject map from application.yml来从application.yml文件中注入map 下面是我的application.yml代码段 属性文件如下所示 但是,我发现只有当setter和getter的格式正确时才会发生值注入,即getPairMap和setPairMap。在使用getPairs或setpairs时不是这种行为的原因是什么

  • 我正在开发一个spring boot应用程序。在这个应用程序中,我使用以下代码将application.properties创建为spring bean 是否可以在Application.Properties中不使用Https.port字段来运行场景1?

  • 我有一个存储库接口,它有两个实现。一个从本地存储的CSV文件读取数据,另一个从亚马逊迪纳摩数据库读取数据。我希望能够根据应用程序属性或自定义构建配置文件在我使用的实现之间切换。我通常会在运行时使用工厂来检索正确的类,但是如果可能的话,我希望通过注入来实现这一点。 我在使用Spring boot时发现了一个类似的问题,但在运行时找不到在Quarkus Spring choose bean实现中适用的

  • 问题内容: 从属性文件中为最终属性进行Spring注入的一个简单问题。 我有一个属性文件,要在其中存储文件路径。通常,当我使用属性文件时,我会使用类似以下的方法来设置类属性: 然后在我spring.xml我会像这样: 这很好用,很简单,并且使代码简洁美观。但是我不确定在尝试将属性值注入最终类属性时使用的最整洁的模式是什么? 显然是这样的: 不管用。还有另一种方法吗? 问题答案: 将值注入最终字段的

  • 问题内容: 关于从属性文件中为最终属性进行Spring注入的一个简单问题。 我有一个属性文件,要在其中存储文件路径。通常,当我使用属性文件时,我会使用类似以下的方法来设置类属性: 然后在我spring.xml我会像这样: 这样效果很好,很简单,并且使代码更简洁。但是我不确定在尝试将属性值注入最终类属性时使用的最整洁的模式是什么? 显然是这样的: 不管用。还有另一种方法吗? 问题答案: 如果您正在寻

  • 在静态编程语言中,与Java一样,我们可以通过@Target元注释(例如。所以注释只能应用于值参数)。 我的用例是,我想使用反射来验证属性(例如。@MustNotBeAir name: String),我想根据属性的类型限制注释的种类(例如。@MustBe正数: Int只能是应用于Int属性)。也欢迎对基于反射的验证的可行性进行评论。 是否有任何方法可以在编译时实现这一点,或者我需要在运行时检查这