0

I wrote a method in a class annotated @componentto run every 12AM , to test that it is working I made the method run every 10 seconds but I get a null response . Here is the task

  @Scheduled(cron="*/10 * * * * ?")
        void changeInvestmentStatus() {
        //  DateTimeFormatter formatter = new DateTimeFormatter("yyyy-MM-dd")
        LocalDate today = LocalDate.now();
        List<Investment> investmentList = this.investmentRepository.findAll();
        for(Investment investment : investmentList) {
            if (investment.getMaturityDate().compareTo(today) == 0) {
                investment.setStatus(InvestmentStatus.Matured);
            }
        }
         System.out.println("Investment Status Updated");
        }

This is the response :

java.lang.NullPointerException: null
        at com.bethsaida.org.config.ScheduledTasks.changeInvestmentStatus(ScheduledTasks.java:65) ~[classes/:na]
        at jdk.internal.reflect.GeneratedMethodAccessor171.invoke(Unknown Source) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.3.9.jar:5.3.9]
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.3.9.jar:5.3.9]
        at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:95) ~[spring-context-5.3.9.jar:5.3.9]
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
        at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

  • The method does not return `null`. In fact, it returns `void` (i.e. nothing). --- My guess is that either `this.investmentRepository` is `null` or `this.investmentRepository.findAll()` returns null, but with the code provided, it is impossible to tell. – Turing85 Apr 27 '22 at 14:22
  • which of those lines is line 65? – peer Apr 27 '22 at 14:23
  • you can simply do add println after every line and find it. my guess is getMaturityDate is returning null and comparing it gives NPE – Gurkirat Singh Guliani Apr 27 '22 at 14:25
  • `investmentRepository` seems `null` – Ashish Patil Apr 27 '22 at 14:26
  • @peer line 65 is if (investment.getMaturityDate().compareTo(today) == 0) and investment repository is not null . findAll() is JPArepository inbuilt method – HairyTarzan Apr 27 '22 at 14:30

0 Answers0