我正在使用JBoss 4&弹簧。在Web应用程序中,我使用Quartz调度程序来执行某些计划任务。在Quartz作业中,我想获得服务器路径是否可能?如果是,怎么样?
PS:某些背景 我需要Quartz作业中的服务器路径,因为该作业会发送电子邮件。电子邮件包含我的应用程序所服务的网站的链接,为了构建正确的URL,我需要一个服务器路径。硬编码服务器路径是禁忌,因为应用程序部署在各种服务器上。
答案 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
并解析它以获取主机名。