我想在Spring 5中创建一个JavaMailSender
bean,从反应数据库中读取属性。
@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;
}
除了阻止,还有其他方法吗?
答案 0 :(得分:2)
您应该完全避免在Spring-Webflux或任何类型的反应框架中使用.block()
。通过阻塞,除了阻塞当前线程外,您什么都不会做,因此会对应用程序产生过大的杀伤力。除了阻塞之外,您还可以使用.map()
或.flatMap()
之类的函数并以反应方式处理单声道内部的对象。
编辑
@Bean
public Mono<JavaMailSender> javaMailSender() {
return settingsRepository.findByXXX().flatMap(settings -> {
if(something) {
return Mono.just(new JavaMailSender());
} else {
return Mono.error(new RuntimeException());
}
});
}