《阿布的点点滴滴》:如何使用springboot,整合自定义组件,完成可插拔的效果呢?

原理

 使用过springboot的小伙伴们,一定知道springboot整合了好多的功能,如dubbo、webMVC等,其声明了相应的注解类

@EnableDubbo、@EnableWebMvc来作为此组件的开关。

其实现原理也很简单,springboot模拟了Java的spi机制,实现了自己的spi机制,以达到组件之间的解耦效果。第三方只需要在组件资源的根目录下添加META-INF文件夹,在META-INF文件夹下面添加名为spring.factories的文件,并将组件的入口类的全限定类名加入文件中,springboot启动时即可加载。org.springframework.core.io.support.SpringFactoriesLoader#loadFactories完成了加载的工作,属性FACTORIES_RESOURCE_LOCATION指定了加载的路径"META-INF/spring.factories"。

 

整合自定义的组件,到springboot项目中

 笔者这里创建了一个简单的MVC项目,开发了一个接口/buge/mvp,并返回一个“你很帅!”的字符串的这样一个简单的组件。

项目结构:

同时在项目的根目录中创建META-INF/spring.factories文件,并加入org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.buge.dubboapi.starter.Config的配置信息。

重点看下Config类,此类即为组件的配置类:

 

 注意@ConditionalOnBean:当spring容器中含有Buge这个bean时,才会加载Config,可作为组件的一个开关使用;

那何时去生成Buge的bean呢?这需要借助于spring的@Impor注解,来注入自定义的类,交由spring来管理。

项目中@EnableBuge注解,即完成了注入buge的工作。下图可看到,在注解类上添加了@Import(Buge.class)

 

这里做个小总结:@EnableBuge注解即为我们组件的开关,若添加了此注解,会促使spring加载Buge到spring容器中,而springboot通过spi机制加载的Config类是需要容器中有Buge,所以添加了@EnableBuge注解,Config会生效,组件的功能才可用。当然,把Config类上的 @ConditionalOnBean 去掉后,就没这个bean的限制了。但笔者认为,这个开关还是有必要的!

测试

将以上组件打包,放入本地maven仓库中。创建一个springboot项目,导入组件的依赖。在springboot的启动类上加入@EnableBuge注解。

 启动服务,调用组件接口,看结果:

 是的,我们开发的组件生效了!倘若想关闭组件的功能,把启动类上的@EnableBuge去掉即可,如下图。继续测试一波:

启动服务,调用组件接口,看结果:

返回404,组件功能关闭!

到此为止,我们就完成了自定义组件,就整合到了springboot中。

  思考

       整合组件到springboot中,是很简单的事情,而开发一个NB组件,才是难点、重点。如mybatis-spring组件,就对spring进行了大量的扩展。mybatis生成了自己的ClassPathMapperScanner,定义了mybatis的扫描规则,以至于spring可加载mapper接口,并对其生成代理,把代理类交由spring容器管理,并暴露给用户使用。使用者只需在配置类中添加@MapperScan注解,指定扫描的路径,就可使用mybatis的功能!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好!使用Sharding-JDBC在Spring Boot项目中进行数据库分片是一个不错的选择。下面是一些步骤来集成Sharding-JDBC到Spring Boot项目中: 第一步,添加Sharding-JDBC依赖到项目的pom.xml文件中: ```xml <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.1.1</version> </dependency> ``` 第二步,配置Sharding-JDBC相关的数据源和规则。可以在application.properties或application.yml文件中进行配置,例如: ```yaml spring: shardingsphere: datasource: names: ds0, ds1 ds0: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db0 username: root password: password ds1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db1 username: root password: password sharding: tables: user: actual-data-nodes: ds${0..1}.user_${0..1} table-strategy: inline: sharding-column: id algorithm-expression: user_${id % 2} ``` 在上面的示例中,配置了两个数据源(ds0和ds1),并指定了分片规则:根据user表的id字段进行分片,将数据分散到ds0.user_0、ds0.user_1、ds1.user_0、ds1.user_1这四个表中。 第三步,使用Sharding-JDBC的数据源进行数据库操作。在需要使用数据库的地方,注入ShardingDataSource数据源,例如: ```java @Autowired private DataSource dataSource; public void queryData() { try (Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement()) { ResultSet resultSet = statement.executeQuery("SELECT * FROM user"); while (resultSet.next()) { // 处理查询结果 } } catch (SQLException e) { // 异常处理 } } ``` 以上是使用Sharding-JDBC在Spring Boot项目中进行数据库分片的基本步骤,您可以根据具体需求进行更详细的配置和使用。希望能对您有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值