我需要在没有存储库的情况下使服务具有响应性

时间:2019-04-16 14:41:19

标签: java spring-boot reactive-programming project-reactor reactor

我的任务是使用Flux / Mono使UserService具有反应性。

我了解flux和mono的工作原理,但仅对存储库而不是对数组列表起作用。

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());
    }
}

1 个答案:

答案 0 :(得分:1)

您可以从列表创建助焊剂。例如:

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