Search code examples
javamongodbspring-bootspring-data-redisspring-mongodb

save data to mongodb from redis message


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


Solution

  • Done, resolve...

    The solution is add @autowired Employee Repositories in redis appconfig configuration class

    Thanks