Я создал пользовательскую функцию 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
всегда равен null
?Другие части моего кода могут использовать MessageRepo, кроме случаев, когда у меня есть свой собственный приемник.