Spring boot如何写一个自定义的auto-configuration(下)

Spring boot如何写一个自定义的auto-configuration(下)

定义需求

就比如写一个很简单的redis配置的starter, 规定好redis的url就可以使用redis的client

编写starter

首先理解一下spring boot的原理:

通过一些condition的判断,来启用或者不启用使用bean方式的配置。这个会有Spring boot负责扫描每个jar下的META-INF/spring.factories中的key有哪些。

其次理解一下spring boot自动配置设计的结构.

  • parent module

    负责定义pom的dependency management,用来引用依赖的版本

  • starters module

    负责定义有多少个starter, 继承于parent module

  • starter module

    负责额外共同的依赖,比如autoconfigure, logging, yaml等

  • 具体的starter module,比如web

    空的module,只负责定义这个功能还需要哪些依赖。

接下来来具体实际干吧,但是贴代码有点繁琐,所以只说步骤。

  1. 建立工程cn.kevin.spring.boot,并建立相应的.gitignore文件

  2. 建立dependencies module,这个负责定义依赖,承担的是spring boot的parent角色。注意的是,这里的packaging类型必须是pom

  3. 建立starter module,这一步是可选的,因为如果模块不多的话,可以在具体的模块中引用

  4. 建立autoconfigure module,用来读取配置文件中的属性。这里要注意的是,可能我们需要检测到某个class存在才启用。一定不要写成@ConditionOnBean了,正确的应该是@ConditionOnClass. 这个模块也要集成dpenencies模块

  5. 建立具体的starter module, 来定义额外的依赖。这个模块也要继承于dependencies模块

  6. 发布到maven.

实际测试的时候只要建立了redis,然后配置相应的url,就应该能够成功引用到了jedis实例和集群。

Tips:

  • 在测试的时候可能需要观察自动配置是否被启用了,可以开启spring boot的report。 正常启动应用加参数--debug, 使用Junit测试的时候,加上这个@TestPropertySource(properties = "debug=true")。会列出来启用的状态,及为什么

  • 这样写可能会有点麻烦,因为有的依赖很简单,可以将autoconfigure和starter合二为一,因为你会发现autoconfigure依赖已经足够了

结束了。代码在此

首次理解spring boot的结构还是有点麻烦的,不过理解之后设计挺好的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值