我的任务是通过使用Flux / Mono使UserService成为被动的。
我理解通量和单声道是如何工作的,但只使用存储库而不是arraylists。
UserServiceImpl:
@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class UserServiceImpl implements UserService {
private List<User> users = new ArrayList<>();
@PostConstruct
public void postConstruct() {
this.users.add(User.builder()
.id(1L)
.username("username1")
.age(14)
.build());
}
@Override
public User findOne(Long userId) {
LOGGER.info("UserService: execute findOne(userId) method");
return this.users.stream()
.filter(user -> user.getId().equals(userId))
.findFirst()
.orElse(null);
}
@Override
public List<User> findAll() {
LOGGER.info("UserService: execute findAll() method");
return this.users;
}
@Override
public void add() {
LOGGER.info("UserService: execute add() method");
this.users.add(User.builder()
.id(3L)
.username("username3")
.age(34)
.build());
}
}
您可以从List创建Flux。例如:
Flux<User> userStream = Flux.fromIterable(users)
或者如果需要返回一个
Flux.just(user)
Mono.just(user)
在现有流中添加值
userStream = Flux.concat(userStream, Flux.just(newUser));
更多细节:https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html