Spring应用程序:在Quartz作业中获取服务器路径

时间:2011-05-27 03:51:21

标签: java spring quartz-scheduler

我正在使用JBoss 4&弹簧。在Web应用程序中,我使用Quartz调度程序来执行某些计划任务。在Quartz作业中,我想获得服务器路径是否可能?如果是,怎么样?

PS:某些背景 我需要Quartz作业中的服务器路径,因为该作业会发送电子邮件。电子邮件包含我的应用程序所服务的网站的链接,为了构建正确的URL,我需要一个服务器路径。硬编码服务器路径是禁忌,因为应用程序部署在各种服务器上。

2 个答案:

答案 0 :(得分:10)

从Quartz作业中获取数据是没有明智之举的,所以它必须是另一种方式。有一个全局配置bean,称之为ServerConfig或其他。让它实现ServletContextAware,然后在启动Web上下文时自动通知它。

public class ServerConfig implements ServletContextAware{
    private String serverRootUrl;
    public String getServerRootUrl(){ return serverRootUrl; }
    public void setServletContext(ServletContext servletContext){
        this.serverRootUrl=servletContext.getRealPath("/");
    }
}

现在只需将Bean注入Quartz作业类,然后使用serverConfig.getServerRootUrl()检索根URL。

答案 1 :(得分:1)

如果在启动Quartz作业时有javax.servlet.http.HttpServletRequest.getRequestURL()对象,则可以使用HttpServletRequest并解析它以获取主机名。