Ich hatte in den meisten Beitrag auf SO untersucht, aber nichts davon wirklich geholfen. Ich bekomme die NPE beim Zugriff auf die DAO mit Spring Bean.Zugang Frühlingsbohne in Quarz Job
Mein Scheduler
@Repository
@Transactional
public class JobSchedulerImpl implements IJobScheduler {
Scheduler scheduler;
Trigger trigger;
JobDetail job;
public JobSchedulerImpl() {
super();
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
} catch (SchedulerException e) {
logger.error("Exception while starting the scheduler :{} ", e.getMessage());
}
}
@Override
public void runWeekly(String whichDay, String userName) throws Exception {
//whichDay = whichDay.substring(0, 3);
//String cornJobExpression = "0 07 16 ? * " + whichDay + " *";
logger.info("Running Weekly Job");
String cornJobExpression = "0 0/1 * 1/1 * ? *";
job = JobBuilder.newJob(RunWeeklyJob.class).withDescription("runWeeklyJob_" + userName)
.withIdentity(userName, "group_runWeekly").build();
trigger = TriggerBuilder.newTrigger().withIdentity("runWeeklyTrigger_" + userName, "group_runWeekly")
.withSchedule(CronScheduleBuilder.cronSchedule(cornJobExpression)).startNow().build();
scheduler.scheduleJob(job, trigger);
}
}
Jobklasse
public class RunWeeklyJob implements Job {
public static final Logger logger = LoggerFactory.getLogger(RunWeeklyJob.class);
@Autowired
private IRunReport report;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
//SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
JobDetail jobdetails = context.getJobDetail();
JobKey jobKey = jobdetails.getKey();
String name = jobKey.getName();
report.getReport();
logger.info("Context : {}", context.toString());
}
}
Bericht-Schnittstelle
public interface IRunReport {
public void getReport();
}
Implementierung
@Repository
@Transactional
public class RunReport implements IRunReport{
@Autowired
private IGenericCRUDDao genericDao;
public void getReport()
{
System.out.println("genericDao" + genericDao);
User userObj = genericDao.getEntityById(User.class, 1);
System.out.println("userObj : " + userObj);
}
Testfall
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/spring/applicationContext.xml")
public class RunReportTest {
@Autowired
IJobScheduler jobScheduler;
@Test
public void test_A_AddClients() throws Exception {
jobScheduler.runWeekly("MONDAY", "Santosh");
Thread.sleep(70000);
}
}
ich die NPE bin immer, während die Feder Bohne genericDao Zugriff während der geplanten Auftrag ausgeführt wird. Ich habe versucht SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
und andere vorgeschlagene Antworten auf SO, aber kein Glück. Kann mir jemand helfen, wo ich falsch liege?
Ja, das ist schon da. – Santosh