# 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);
```