java – JpaRepository不在自定义RichSinkFunction中自动装配
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JpaRepository不在自定义RichSinkFunction中自动装配,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1792字,纯文字阅读大概需要3分钟。
内容图文
![java – JpaRepository不在自定义RichSinkFunction中自动装配](/upload/InfoBanner/zyjiaocheng/782/f8b85af65be343a78cd92cd0c215b7cd.jpg)
我创建了一个自定义的Flink RichSinkFunction并试图在这个自定义类中自动装配JpaRepository,但我不断得到一个NullPointerException.
如果我在构造函数中自动装配它,我可以看到找到了JpaRepo – 但是当调用invoke方法时,我收到一个NullPointerException.
public interface MessageRepo extends JpaRepository<Message, Long> {
}
@Component
public class MessageSink extends RichSinkFunction<Message> {
private final transient MessageRepo messageRepo; //if i don't make this transient, i get the error message "The implementation of the RichSinkFunction is not serializable"
@Autowired
public MessageSink(MessageRepo messageRepo){
this.messageRepo = messageRepo;
messageRepo.save(new Message()); //no issues when i do this
}
@Override
public void invoke(Message message, Context context) {
// the message is not null
messageRepo.save(message); // NPE
}
以前有没有人遇到过这个问题?看起来MessageSink调用方法是在一个单独的线程中调用的,这就是为什么messageRepo总是为空?
我有自己的自定义接收器时,我的代码的其他部分可以使用MessageRepo.
解决方法:
我不清楚原因,但我认为spring boot在注入bean时优先考虑你的服务类.当我试图为我的Entity类编写一个监听器时,我遇到了类似的问题.这就是我解决它的方式.
创建一个实现ApplicationContextAware接口的组件类,并覆盖setApplicationContext方法.在你的类中有一个名为getBean的静态方法,它将在你的第一个请求时自动装配.示例代码—
@Component
public class SpringBeansUtil implements ApplicationContextAware {
private static ApplicationContext context;
@SuppressWarnings("static-access")
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.context = applicationContext;
}
public static <T> T getBean(Class<T> beanClass) {
return context.getBean(beanClass);
}
}
然后只需在代码中获取bean ——->>
ClassName referenceName =(ClassName)SpringBeansUtil.getBean(ClassName.class);
内容总结
以上是互联网集市为您收集整理的java – JpaRepository不在自定义RichSinkFunction中自动装配全部内容,希望文章能够帮你解决java – JpaRepository不在自定义RichSinkFunction中自动装配所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。