2016-04-25 5 views
0

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?

Antwort

0

Dies war Frühling Sicherheit erlaubte mir nicht die Bohne außerhalb des Web-Kontext zu injizieren. Sobald ich die Berechtigung eingerichtet habe, funktioniert es wie erwartet.

Die interessanten Dinge, die keine Ausnahme gibt keine Ahnung über sicherheitsrelevante Nachricht.

0

Überprüfen Sie, ob die Paket-Scan-Komponente in Ihrer Konfiguration angegeben ist. Ex:

<context:component-scan base-package="your.package.here" /> 

Frühling liest es für Anmerkungen zu scannen.

+0

Ja, das ist schon da. – Santosh