从零手写并发框架(四)异步转同步 springboot 整合( 二 )
这里统一拦截指定了 @Sync 和 @SyncCallback 注解的方法 。
复用了原来的代理的实现 , 当然你可以重新实现 。
spring 整合验证在有了字节码增强的基础上 , 我们实现 spring 整合实际上非常简单 。
下面让我们验证一下实现是否符合我们的预期 。
maven 引入
入门测试配置类@EnableSync 注解启用 sync 特性 。
@Configurable@ComponentScan(basePackages = "com.github.houbb.sync.test.service")@EnableSyncpublic class SpringConfig {}
业务代码和以前一样
@Servicepublic class UserService {String id = "";@Syncpublic String queryId() {System.out.println("开始查询");return id;}@SyncCallback(value = "http://kandian.youth.cn/index/queryId")public void queryIdCallback() {System.out.println("回调函数执行");id = "123";}}
测试代码@ContextConfiguration(classes = SpringConfig.class)@RunWith(SpringJUnit4ClassRunner.class)public class SpringUserServiceTest {@Autowiredprivate UserService userService;@Testpublic void queryIdTest() {// 异步执行回调new Thread(new Runnable() {@Overridepublic void run() {try {System.out.println("开始异步执行回调");TimeUnit.SECONDS.sleep(2);userService.queryIdCallback();} catch (InterruptedException e) {e.printStackTrace();}}}).start();String id = userService.queryId();System.out.println("id: " + id);}}
测试结果符合我们的预期 , 日志和上一节类似 , 此处就不再贴出 。
springboot 整合实现整合原理利用 spring-boot-starter , 在 spring.factories 文件中指定如下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.github.houbb.sync.springboot.starter.config.SyncAutoConfig
这样就可以在 springboot 启动的时候自动加载我们定义的配置类 。
SyncAutoConfig 配置package com.github.houbb.sync.springboot.starter.config;import com.github.houbb.sync.spring.annotation.EnableSync;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.context.annotation.Configuration;/** * 异步转同步自动配置 * @author binbin.hou * @since 0.0.3 */@Configuration@ConditionalOnClass(EnableSync.class)@EnableSyncpublic class SyncAutoConfig {}
实现非常的简单 , 直接启用 @EnableSync 注解 。
【从零手写并发框架(四)异步转同步 springboot 整合】这样使用的时候只需要引入 jar , 就可以自定生效了 。
当然也可以和 springboot 的配置文件配合 , 提供更加灵活的配置 。
验证maven 引入
配置@SpringBootApplicationpublic class SyncApplication {public static void main(String[] args) {SpringApplication.run(SyncApplication.class, args);}}
只需要引入 jar 即可 , 业务类的定义和 spring 整合保持一致 , 然后就可以开始使用了 。
小结到这里我们就把同步框架整合 spring 和 springboot 基本完成了 。
回顾我们整个历程 , 从最开始的异步查询转同步的 7 种方式 , 到对其中几种常见的封装 , 然后是字节码结合注解的代理使用 , 最后是本节的 spring 的整合 。
推荐阅读
- 三星发布Galaxy Chromebook 2 配备QLED显示屏和特殊手写笔支持
- 开会再也不用手写,微信打开这个设置,会议纪要一键生成
- “记”兴之作 智能手写本推荐——柔宇RoWrite 2
- 青少年|封面评论 |“青少年模式”依旧漏洞百出,标准化合规框架必须落地
- 为中端机配备手写笔!摩托罗拉G Stylus 2021渲染图曝光
- 打造智慧互联新高地——惠阳(良井)智慧互联科技园项目合作框架协议今天签约
- S Pen手写笔支持将为Galaxy Z Fold 3带来质变
- Swagger2—API文档框架(二)
- 在Linux系统中安装深度学习框架Pytorch
- 海外商家试水小程序商城,微盟国际化战略框架已现