# springboot-starter **Repository Path**: zhaolijin/springboot-starter ## Basic Information - **Project Name**: springboot-starter - **Description**: Redission分布式锁 SpringCloud微服务接口查询 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2020-11-07 - **Last Updated**: 2025-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot-starter 框架组件 1.微服务接口提供者和消费者查询列表 ### 1.引入依赖jar包 com.tourscool inquire-springboot-starter 1.0.1 org.reflections reflections 0.9.10 ### 2.Application中添加 @RequestScanPackage(value = "com.tourscool.daiyu.service.feign") https://img.qumoyugo.com/img/6RL42G8SN8AB1PWYJESBY1644375732993.png 2.Redission分布式锁组件 RedisExecBuilder.build().execThrows(redissonClient -> { RLock rLock = redissonClient.getLock("test_lock"); try { rLock.tryLock(); ### ---业务代码--- System.out.println(rLock.isLocked()); } catch (Exception ignore) { } finally { try { if (rLock != null && rLock.isLocked()) { rLock.unlock(); } } catch (Throwable e) { e.printStackTrace(); } } return true; }); 3.aggregator异步聚合组件 功能:通过注解资源实现并行调用查询接口并进行数据聚合 ### 1. 添加依赖和配置 pom.xml ```xml com.tourscool aggregator-springboot-starter 1.0.0 org.reflections reflections 0.9.10 ``` application.properties ```properties # 指定要扫描注解的包,默认com.tourscool com.tourscool.springboot.starter.base-packages=com.tourscool.springboot.starter.example ``` ### 2. 对资源接口添加注解,必须是public方法 - `@DataProvider` 定义数据提供者 - `@DataConsumer` 定义方法参数依赖类型为其他接口返回值, 其他接口是一个`@DataProvider` - `@InvokeParameter` 定义方法参数依赖类型为用户输入值 ## 示例 开发一个用户汇总数据接口, 包括用户的基础信息和博客列表 ### 1. 定义提供基础数据的"原子"服务 使用`@DataProvider`定义接口为数据提供者 使用`@InvokeParameter`指定要传递的用户输入参数 **博客列表服务** 需要参数`userId` ```java @Service public class PostServiceImpl implements PostService { @DataProvider("posts") @Override public List getPosts(@InvokeParameter("userId") Long userId) { } } ``` **用户基础信息查询服务** 需要参数`userId` ```java @Service public class UserServiceImpl implements UserService { @DataProvider("user") @Override public User get(@InvokeParameter("userId") Long id) { } } ``` ### 2. 调用聚合接口 #### 方式一: 函数式调用 注意这里不能将函数式调用改为Lambda表达式, 两者的实际行为是不一致的. ```java User user = DataFacade.get( Collections.singletonMap("userId", 1L), new Function2, User>() { @Override public User apply(@DataConsumer("user") User user, @DataConsumer("posts") List posts) { user.setPosts(posts); return user; } }); ``` #### 方式二: 定义聚合层查询 组合`@DataProvider` \ `@DataConsumer` \ `@InvokeParameter` 实现汇聚功能 ```java @Component public class UserAggregate { @DataProvider("userWithPosts") public User userWithPosts( @DataConsumer("user") User user, @DataConsumer("posts") List posts) { user.setPosts(posts); return user; } } ``` 指定要查询的data id, 查询参数, 返回值类型, 并调用`facade.get`方法即可 ```java User user = DataFacade.get(/*data id*/ "userWithPosts", /*Invoke Parameters*/ Collections.singletonMap("userId",1L), User.class); ```