SpringBoot项目根据配置文件初始化并向容器注册Bean

本文介绍了如何在SpringBoot项目中,根据配置文件中的数据库类型动态初始化并注册对应的服务bean,如ES、MySql和Milvus,利用@Conditional注解实现条件装配。
摘要由CSDN通过智能技术生成

SpringBoot项目根据配置文件初始化并向容器注册Bean


前言

在开发过程种有这种场景,我们在使用数据存储的时候定义了一个接口,接口的实现有很多,例如有es的数据存储实现,mysql的数据存储实现,每个项目只能选择一种数据库。这个时候我们再写代码的时候就可以考虑在配置文件中配置一个数据库类型,启动的时候只对配置的数据库进行初始化,并向容器注册对应的bean

一、场景图示

描述:每个项目都有子集不同的配置,A项目配置了ES数据库,启动的时候我们根据A配置来实现数据处理接口的实现类为ES处理实现类(A类),则不初始化以及注册B、C两个类。其他同理。

在这里插入图片描述

二、实现

1.定义一个Condition实现类

定义Condition实现类的目的是获取配置文件配置,判断是否需要加载注入某个bean

public class MilvusBeanConditional implements Condition {
    /**
     * 是否初始化Milvus
     */
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment environment = context.getEnvironment();
        String dbServiceFlag = environment.getProperty("model.vector.dbType");
        if (StringUtils.equals(dbServiceFlag, "Milvus")) {
            return true;
        } else {
            return false;
        }
    }
}
public class EsBeanConditional implements Condition {
    /**
     * 是否初始化es
     */
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment environment = context.getEnvironment();
        String dbServiceFlag = environment.getProperty("model.vector.dbType");
        if (StringUtils.equals(dbServiceFlag, "es")) {
            return true;
        } else {
            return false;
        }
    }
}
public class MyssqlBeanConditional implements Condition {
    /**
     * 是否初始化Myssql
     */
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        Environment environment = context.getEnvironment();
        String dbServiceFlag = environment.getProperty("model.vector.dbType");
        if (StringUtils.equals(dbServiceFlag, "Myssql")) {
            return true;
        } else {
            return false;
        }
    }
}

2.按照配置装配bean

更具上述定义的matches方法来实现是否需要装配某个bean,
@Conditional(MilvusBeanConditional.class) 可以用在方法上也可以用在类上
在数据库配置为Milvus数据库的时候,就会装配MilvusServiceClient并注入springboot容器

    @Bean
    @Conditional(MilvusBeanConditional.class)  //根据MilvusBeanConditional类的matches方法来判断实现执行
    public MilvusServiceClient milvusServiceClient() {
        return new MilvusServiceClient(
                ConnectParam.newBuilder()
                        .withUri(host + ":" + milvusPort)
                        .build());
    }

总结

@Conditional注解这个注解在Spring4中引入,其主要作用就是判断条件是否满足,从而决定是否初始化并向容器注册Bean,自定义实现一个bean时只需要实现Condition接口中的matches方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值