Java 如何在特定时间段将文件加载到web应用程序中?

Java 如何在特定时间段将文件加载到web应用程序中?,java,file,multithreading,load,Java,File,Multithreading,Load,我有下一个任务:我需要将同一个文件加载到我的web应用程序中好几次,例如,一天两次!假设在该文件中我有信息,这些信息会发生变化,例如,我需要将这些信息加载到我的应用程序中以更改统计信息 如何多次(一小时两次或一天两次)加载文件? 我应该用什么?有什么算法可以做到这一点吗 我不允许使用像Quartz Scheduler这样的外部库。所以我需要用线程和/或定时器来完成。有谁能给我一些例子或算法如何做到这一点。在哪里可以创建线程的入口点,可以在托管bean中创建,或者需要某种过滤器/侦听器/servl

我有下一个任务:我需要将同一个文件加载到我的web应用程序中好几次,例如,一天两次!假设在该文件中我有信息,这些信息会发生变化,例如,我需要将这些信息加载到我的应用程序中以更改统计信息

如何多次(一小时两次或一天两次)加载文件? 我应该用什么?有什么算法可以做到这一点吗

我不允许使用像Quartz Scheduler这样的外部库。所以我需要用线程和/或定时器来完成。有谁能给我一些例子或算法如何做到这一点。在哪里可以创建线程的入口点,可以在托管bean中创建,或者需要某种过滤器/侦听器/servlet。我使用jsf和richFaces。也许在这些技术中有一些算法可以解决我的问题

有什么想法吗

非常感谢你的帮助

这个怎么样:


我会使用。我不知道你的应用程序的架构,所以我不能说是Spring配置还是代码配置更好。如果您想要更具表现力的调度,您可以使用SimpleTrigger,甚至CronTrigger。

检查,它应该足以满足您的需要。

我将在您的webapp中将“加载”功能的入口点作为servlet公开,然后使用外部调度程序(Unix上的cron,Windows上的调度任务)通过wget或任何其他命令行http客户端调用该servlet


这种方法的优点是不依赖于任何第三方库(仅为一项任务添加Qurtz对我来说似乎太过分了),并且还可以灵活地更改计划,而无需触动代码,也可以根据需要手动触发“加载”。

如果无法使用计划程序,则使用servlet和计时器


其中描述了如何做到这一点。这正是您所需要的。

感谢所有人的帮助-我在Timer、TimerTask和ServletContextListener的帮助下完成此任务:

        servletContext = event.getServletContext();

        // create the timer and timer task objects
        Timer timer = new Timer();
        // get a calendar to initialize the start time
        Date startTime = Calendar.getInstance().getTime();

        List<Company> companies = CompanyUtils.getInstance().getCompanies();
        if (companies.size() == 0)
            return;

        for (int i = 0; i < companies.size(); i++) 
        {
            FileUpdater task = new FileUpdater(companies.get(i).getUrl());

            // schedule the task to run hourly
            timer.scheduleAtFixedRate(task, startTime, companies.get(i).getUpdatePeriod());
        }

        // save our timer for later use
        servletContext.setAttribute("timer", timer);
servletContext=event.getServletContext();
//创建计时器和计时器任务对象
定时器=新定时器();
//获取日历以初始化开始时间
Date startTime=Calendar.getInstance().getTime();
List companys=CompanyUtils.getInstance().getcompanys();
如果(companys.size()==0)
返回;
对于(int i=0;i
再次感谢

致以最良好的祝愿