spring 在bean初始化期间使用React式仓库-我需要block()吗?

axkjgtzd  于 2022-11-21  发布在  Spring
关注(0)|答案(1)|浏览(119)

我想在Spring 5中创建一个JavaMailSender bean,从一个React式数据库中阅读属性。

@Bean
public JavaMailSender javaMailSender() {
   JavaMailSender javaMailSender = new JavaMailSender();

   Settings settings = settingsRepository.findByXXX().block(); //returns Mono<Settings> -> Settings after blocking
   //copy stuff from settings to javaMailSender

   return javaMailSender;
}

除了封锁,还有其他方法吗?

pgky5nke

pgky5nke1#

你应该完全避免在Spring-Webflux或任何类型的React式框架中使用.block()。通过阻塞,你除了阻塞当前线程之外什么也不会做,所以你会对应用程序产生过度破坏。代替阻塞,你可以使用像.map().flatMap()这样的函数,并以React式的方式处理mono中的对象。

编辑

@Bean
    public Mono<JavaMailSender> javaMailSender() {
        return settingsRepository.findByXXX().flatMap(settings -> {

            if(something) {
                return Mono.just(new JavaMailSender());
            } else {
                return Mono.error(new RuntimeException());
            }

        });
    }

相关问题