如何强制SpringBoot仅使用多个配置类中的一个?

时间:2019-12-20 20:04:03

标签: java spring spring-boot

我有一个项目,其中有两个不同的运行时(一个lambda和一个fargate)。我有两个不同的配置,但只想运行一个。

enter image description here

如何排除和包含配置类?这似乎不起作用:

@SpringBootApplication(exclude = DynamoConfig.class)

由于它们在同一“路径”中,因此我不能仅排除软件包

com.cat.lakitu.runner

因为“持久性”包装也将被排除。

2 个答案:

答案 0 :(得分:2)

我将在两个配置中使用@ConditonalOnProperty批注,并在其中一个运行时的主属性中添加属性,以lambda为例(因为您说过每次运行都使用不同的运行时)

public static void main(String[] args) {
    SpringApplication application = new SpringApplication(DemoApplication.class);
    Properties properties = new Properties();
    properties.put("lambda.application", "true");
    application.setDefaultProperties(properties);
    application.run(args);
}

然后在运行时为lambda时需要的配置上,您可以这样注释bean

    @ConditionalOnProperty(
        value="lambda.application",
        havingValue = "true")
public class DyanmoConfig {

然后另一个bean可能具有以下条件属性

        @ConditionalOnProperty(
        value="lambda.application",
        havingValue = "false",
        MatchIfMissing= true)
public class PersistConfig {

这样,您只需要在两个主要对象之一中以编程方式设置属性即可。

答案 1 :(得分:1)

有多种解决方法。您选择哪种选择取决于您的特定用例和需求。

使用个人资料:https://www.baeldung.com/spring-profiles

示例:

@Component
@Profile("runtime1")
public class DynamoConfig

使用条件Bean(多种可能性):https://reflectoring.io/spring-boot-conditionals/

@Component
@ConditionalOnProperty(
    value="module.enabled", 
    havingValue = "true", 
    matchIfMissing = true)
public class DynamoConfig