我的石英工作看起来像这样。
public class EmailJob implements Job{
/** */
private DashboardDaoImpl dashboardDAO = new DashboardDaoImpl();
/** */
private static Logger log = Logger.getLogger("com.tapestrysolutions.gwt.predictivelogistics.relevanceengine.server.scheduler.EmailJob");
/** */
private UserDao userDao = new JdbcUserDaoImpl();
public void execute(JobExecutionContext context) throws JobExecutionException
{
log.info("EmailJob executing");
EmailNewsSummary email = dashboardDAO.getFilteredArticlesSummary(EmailNewsSummary.cutoffDate());
EmailNewsBuilder builder = new EmailNewsBuilder(email);
sendEmailNews(builder.getEmail());
log.info("email sent");
}
/**
* Sends content to subscribed users
* @param content
*/
public void sendEmailNews(String content) {
//sends email
}
}
当调度程序运行作业时,没有任何反应。当我检查tomcat日志时,记录的唯一内容是" EmailJob正在执行",这是第一个语句。 getFilteredArticlesSummary()内部的第一件事是print语句,所以我知道它没有执行。
有趣的是,我可以通过用一个硬编码的电子邮件字符串替换builder.getEmail()来规避这些方法,并正确发送电子邮件。
这让我相信这个工作实例(EmailJob)不知道我作为实例变量启动的dashboardDAO和userDao。这些对象访问我的sql server并返回数据,它们位于其他包中。如果是这种情况,那么EmailJob如何知道记录器?是因为我宣布它是静态的吗?