利用@Conditional注解实现扫描不同的包路径

业务场景:一个接口有多个实现类,在不同的场景下使用不同的实现类,使用配置的方式注入不同的实现类。

@Conditional注解的类型有很多,按需使用。

示例代码:

//配置文件 application.yml
db:
  hbase: false
  mysql: true

这里使用的@ConditionalOnExpression注解,只有符合条件才会扫描指定的路径。 

/**
 * 根据配置文件 ${db.hbase} 选择是否使用hbase
 * @author hu.caiyun
 * @create 2020/6/22
 */
@Configuration
@ComponentScan(value = "com.hcy.test.dao.hbase")
@ConditionalOnExpression(value = "${db.hbase}")
public class HbaseConfig {

}

/**
 * 根据配置文件 ${db.mysql} 选择是否使用mysql
 * @author hu.caiyun
 * @create 2020/6/22
 */
@Configuration
@ComponentScan(value = "com.hcy.test.dao.mysql")
@ConditionalOnExpression(value = "${db.mysql}")
public class MySqlConfig {

}

/**
 * 在启动类中配置扫描排除掉实现类所在的包
 * @author hu.caiyun
 * @create 2020/6/22
 */
@SpringBootApplication
@ComponentScan(excludeFilters =
        {
                @ComponentScan.Filter(type = FilterType.REGEX,pattern = "com.hcy.test.dao.*")
        })
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication .class, args);
    }

}

示例代码是一个项目兼容多个数据库的实现,目前只能想到这种办法,如果有更好的办法,欢迎指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值