I have problem to save data to mongodb is always null. The data is from redis message publisher that i want to save as a consumer.
I hope get the solution.
Thanks
Service
@Slf4j
@Service
@Transactional
public class Subscriber implements MessageListener {
@Autowired
private EmployeeRepositories employeeRepositories;
ObjectMapper mapper = new ObjectMapper();
@Override
public void onMessage(Message message, byte[] pattern) {
log.info("Message received {}", message);
try {
Employee employee = mapper.readValue(message.toString(), Employee.class);
log.info("Employee {}", employee);
log.info("NAME {}", employee.getEmpName());
Employee emp = new Employee();
emp.setEmpId(new Random().nextInt(1000));
emp.setEmpName(employee.getEmpName());
emp.setEmpSalary(employee.getEmpSalary());
log.info("EMP SAVE {}", emp);
employeeRepositories.save(emp);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
Employee.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "Employee")
public class Employee implements Serializable {
@Id
private ObjectId id;
private Integer empId;
private String empName;
private Double empSalary;
}
Repositories
@Repository
public interface EmployeeRepositories extends MongoRepository<Employee, ObjectId> {
}
Always get Null
2023-01-29 21:06:00.855 INFO 10956 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2023-01-29 21:06:00.857 INFO 10956 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
2023-01-29 21:06:01.321 INFO 10956 --- [edisContainer-2] com.heydeproject.subscriber.Subscriber : Message received {"empId":707,"empName":"Employee 11111","empSalary":100.0}
2023-01-29 21:06:01.328 INFO 10956 --- [edisContainer-2] com.heydeproject.subscriber.Subscriber : Employee Employee(empId=707, empName=Employee 11111, empSalary=100.0)
2023-01-29 21:06:01.340 INFO 10956 --- [edisContainer-2] com.heydeproject.subscriber.Subscriber : NAME Employee 11111
2023-01-29 21:06:01.340 INFO 10956 --- [edisContainer-2] com.heydeproject.subscriber.Subscriber : EMP SAVE Employee(empId=155, empName=Employee 11111, empSalary=100.0)
2023-01-29 21:06:01.345 ERROR 10956 --- [edisContainer-2] o.s.d.r.l.a.MessageListenerAdapter : Listener execution failed
java.lang.NullPointerException: null
at com.heydeproject.subscriber.Subscriber.onMessage(Subscriber.java:54) ~[classes/:na]
at org.springframework.data.redis.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:296) ~[spring-data-redis-2.6.3.jar:2.6.3]
at org.springframework.data.redis.listener.RedisMessageListenerContainer.executeListener(RedisMessageListenerContainer.java:263) ~[spring-data-redis-2.6.3.jar:2.6.3]
at org.springframework.data.redis.listener.RedisMessageListenerContainer.processMessage(RedisMessageListenerContainer.java:253) ~[spring-data-redis-2.6.3.jar:2.6.3]
at org.springframework.data.redis.listener.RedisMessageListenerContainer.lambda$dispatchMessage$1(RedisMessageListenerContainer.java:1051) ~[spring-data-redis-2.6.3.jar:2.6.3]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
use debug when use debug mode repositories is null
Done, resolve...
The solution is add @autowired Employee Repositories in redis appconfig configuration class
Thanks