2009-08-27 71 views
4

我正在尝试创建一个Spring应用程序(而不是web应用程序)来执行一些简单的任务。最终,他们将与网络上的其他一些Spring应用程序联系起来,但现在我保持简单。我有一个CheckForNewItems类(扩展Timer),它被配置为每10秒运行一次。春季:有没有简单的非网络教程?

我可以证实它运行通过调用它编程:

public class Tester { 

    public static ApplicationContext context; 

    private void loadContext() { 
    String filename = "beans.xml"; 
    context = new FileSystemXmlApplicationContext(filename); 
    } 

    public static void main(String[] args) { 
    Tester test = new Tester(); 
    test.loadContext(); 
    CheckNewItemsTask task = (CheckNewItemsTask)context.getBean("checkNewItemsTask"); 
    } 
} 

运行此按预期工作,task.run()被调用每10秒。现在我需要弄清楚如何将它部署到JBoss或Tomcat服务器上,以便它自动开始运行任务。

我发现的大部分教程只描述了如何让Spring MVC和servlet运行,而不是独立的应用程序。有谁知道更好?

干杯,罗布。

+0

我很困惑;你想要一个独立的应用程序在应用程序服务器中运行?这对我来说是一种矛盾。 – 2009-08-27 16:21:16

+0

当我说独立时,我的意思不是网络,不连接到其他应用程序,只是坐在那里运行.. – 2009-08-27 16:23:01

回答

1

您需要一个设置为在部署时自动启动的servlet。然后,servlet可以调用您的“测试器”类来触发您的“独立”初始化过程。

如果您没有servlet(或潜在的与其他服务器相关的进程)引用您的代码,那么您的初始化过程将永远不会运行。

+1

但是,servlet是一个网络概念吗? 我不一定需要Tester来运行,我只需要将任务加载并运行即可。 – 2009-08-27 16:25:35

+1

@Robert - “但是,当然,servlet是一个网络概念?” - 谁在乎?您似乎错过了这里的观点......有很多(特定于应用程序服务器)的方式来初始化Spring,而没有任何与Web相关的东西。但是,除了调用Spring以使其初始化并运行(并因此让您的任务调度程序运行)之外,没有任何其他的servlet是通用自动初始化类似此类任务的最佳方法。 Servlet通常用于Web相关的事情,但这不是唯一的原因。正是出于这个原因,我已经构建了BatchInitServlet类。 – jsight 2009-08-28 02:50:07

+2

“谁在乎?” - 好吧,有人希望拥有IoC容器的好处,而不必将整个servlet容器堆栈放到他/她的代码库中。 @Robert:我会看看这个[spring文档](http://www.springbyexample.org/examples/intro-to-ioc-creating-a-spring-application.html),以获取在Web堆栈之外使用Spring的示例。 – demaniak 2015-05-25 14:55:03

6

你不需要JBoss或Tomcat来做到这一点。如果应用程序是无头的,并且您无意添加用户界面,请考虑在Windows上使用jsvc或在窗口上使用procrun。如果您需要监视和控制应用程序的功能,并且不需要适当的用户界面来执行此操作,则可能需要查看JMX。这将在没有Java EE堆栈的其余部分的守护进程上工作。

如果您有一个maven项目并希望将其转变为可部署的守护程序应用程序的简单方法,则可以使用maven appassembler自动创建可部署的守护程序,设置应用程序的目录结构,启动脚本并停止库和配置文件。