1

我用 Spring 3 TaskScheduler 做了 jar 应用程序。我用 main 方法运行这个应用程序:

public static void main(String[] args) {
  GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
  ctx.load("classpath:scheduler-app-context.xml");
  ctx.refresh();
  while (true) {
    // ...
  }
  // ...
}

是否可以在 Web 应用程序(war 文件)中运行这个 jar,主要方法?如何在 web.xml 中运行它。

非常感谢

4

2 回答 2

0

在你的做这样的事情web.xml

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:scheduler-app-context.xml</param-value>
</context-param>

<listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

这将从 XML 文件中实例化您的 Spring 上下文。因此,不必像您的main方法那样手动执行此操作。

于 2012-09-07T11:39:01.350 回答
0

如果您在战争中需要简单的调度程序(使用 spring 框架),您还可以执行以下操作:

(在 Spring 中,“@PostConstruct”将初始化调度程序 - 所以不需要 main 方法)

    @Component
    public class Scheduler {

        private static final Logger LOG = LoggerFactory.getLogger(Scheduler.class);


        @PostConstruct
        private void initializeTenSecSchedule() {

            final List<Runnable> jobs = new ArrayList<Runnable>();

            jobs.add(doSomeTestLogs());
            jobs.add(doSomeTestLogs2());

            final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(jobs.size());

            for(Runnable job : jobs){

                scheduler.scheduleWithFixedDelay(job, 10, 10, SECONDS);

            }

        }

        /**
         * ---------------------some schedule tasks--------------------------
         */

        private Runnable doSomeTestLogs(){

            final Runnable job = new Runnable() {
                public void run() { 

                    LOG.debug("== foo SCHEDULE a", 1);
                    System.out.println("Method executed at every 10 seconds. Current time is :: "+ new Date());

                }
            };

            return job;

        }

        private Runnable doSomeTestLogs2(){

            final Runnable job = new Runnable() {
                public void run() { 

                    LOG.debug("== foo SCHEDULE b", 1);
                    System.out.println("Method executed at every 10 seconds. Current time is :: "+ new Date());

                }
            };

            return job;

        }

    }
于 2013-12-02T10:06:26.637 回答