1:Servlet
2: Listener
Servlet:
<!---->package
import org.apache.log4j.Logger;
import javax.servlet.http.HttpServlet;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* @author martin
*/
public class LuceneTimerServlet extends HttpServlet {
private static Logger logger = Logger.getLogger(LuceneTimerServlet.class);
private static Timer timer;
static {
timer = new Timer(true);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("开始创建索引@" + getTime(Calendar.getInstance()));
TaxDocIndexer indexer = new TaxDocIndexer();
indexer.setFirstRun(Boolean.TRUE);
indexer.fetch();
System.out.println("索引创建成功@" + getTime(Calendar.getInstance()));
}
},
getFirstTime(),
getPeriod()
);
}
public void destroy() {
logger.debug("LuceneTimerServlet.destroy() begin");
timer.cancel();
}
/**
* 从服务启动起算,第二天零时开始执行
*
* @return Timer第一次执行时间
*/
private static Date getFirstTime() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
logger.debug("开始执行时间:" + getTime(calendar));
return calendar.getTime();
}
/**
* @param calendar
* @return formated time string
*/
private static String getTime(Calendar calendar) {
return new StringBuffer()
.append(calendar.get(Calendar.YEAR)).append("年")
.append(calendar.get(Calendar.MONTH) + 1).append("月")
.append(calendar.get(Calendar.DAY_OF_MONTH)).append("日 ")
.append(calendar.get(Calendar.HOUR_OF_DAY)).append("时")
.append(calendar.get(Calendar.MINUTE)).append("分")
.append(calendar.get(Calendar.SECOND)).append("秒")
.toString();
}
/**
* 计算一天的时间间隔
* 一天24小时×每小时60分×每分60秒×1000
*
* @return 一天时间
*/
private static long getPeriod() {
return 86400000;
}
}
配置web.xml
如果采用Listener,则是:
import org.apache.log4j.Logger;
import javax.servlet.http.HttpServlet;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
/**
* @author martin
*/
public class LuceneTimerServlet extends HttpServlet {
private static Logger logger = Logger.getLogger(LuceneTimerServlet.class);
private static Timer timer;
static {
timer = new Timer(true);
timer.schedule(new TimerTask() {
public void run() {
System.out.println("开始创建索引@" + getTime(Calendar.getInstance()));
TaxDocIndexer indexer = new TaxDocIndexer();
indexer.setFirstRun(Boolean.TRUE);
indexer.fetch();
System.out.println("索引创建成功@" + getTime(Calendar.getInstance()));
}
},
getFirstTime(),
getPeriod()
);
}
public void destroy() {
logger.debug("LuceneTimerServlet.destroy() begin");
timer.cancel();
}
/**
* 从服务启动起算,第二天零时开始执行
*
* @return Timer第一次执行时间
*/
private static Date getFirstTime() {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
logger.debug("开始执行时间:" + getTime(calendar));
return calendar.getTime();
}
/**
* @param calendar
* @return formated time string
*/
private static String getTime(Calendar calendar) {
return new StringBuffer()
.append(calendar.get(Calendar.YEAR)).append("年")
.append(calendar.get(Calendar.MONTH) + 1).append("月")
.append(calendar.get(Calendar.DAY_OF_MONTH)).append("日 ")
.append(calendar.get(Calendar.HOUR_OF_DAY)).append("时")
.append(calendar.get(Calendar.MINUTE)).append("分")
.append(calendar.get(Calendar.SECOND)).append("秒")
.toString();
}
/**
* 计算一天的时间间隔
* 一天24小时×每小时60分×每分60秒×1000
*
* @return 一天时间
*/
private static long getPeriod() {
return 86400000;
}
}
配置web.xml
<!----> <servlet>
<servlet-name>luceneTimerServlet</servlet-name>
<servlet-class>sompackage.servlet.LuceneTimerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-name>luceneTimerServlet</servlet-name>
<servlet-class>sompackage.servlet.LuceneTimerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
如果采用Listener,则是:
<!----> <listener>
<listener-class>sompackage.servlet.LuceneTimerServlet</listener-class>
</listener>
<listener-class>sompackage.servlet.LuceneTimerServlet</listener-class>
</listener>
相关推荐
在Solr 5.x版本中,为了实现数据的定时更新,用户需要借助特定的扩展来实现定时生成索引。"apache-solr-dataimportscheduler-1.0.zip"是一个官方发布的54l版本,专门针对Solr 5.x的定时索引生成需求。 数据导入调度...
此外,插件可能还提供了自动化功能,例如定时生成或者在内容发布后自动更新网站地图。这样,每当网站有新的内容添加,搜索引擎就能迅速得知并进行索引。 总结来说,织梦生成手机网地图插件是提升织梦网站在移动设备...
总结,这个项目提供了一个轻量级的屏幕截图解决方案,虽然功能上不如QQ截图全面,但它涵盖了基本的截图需求,并且添加了制作GIF动画的能力。通过学习和理解这个源码,开发者可以进一步了解Java图形处理、事件机制...
6. 对于内容更新,可以设定定时任务或者事件触发器,自动重新生成静态页面。 四、注意事项 1. 考虑到静态页面的存储空间和管理,应定期清理过期的静态文件。 2. 静态化可能导致安全问题,例如敏感信息可能被包含在...
- 生成器通常会同时生成这两类地图,以满足不同需求。 5. **实现过程**: - 用户访问网站地图生成器,输入网站URL。 - PHP脚本发起HTTP请求,抓取网站内容,解析HTML以提取所有链接。 - 将链接和相关信息(如...
例如,你可能提到你们的集群有13个节点,根据业务不同有20多个索引,每个索引按照日期分为多个部分,每天新增20多个分片,每个通道每天处理1亿多条数据,索引大小控制在150GB以内。这样的描述可以展示你对实际部署和...
每个通道每天可能会增加1亿多条数据,每个索引有10个分片,且索引大小控制在150GB以内。这样的设计有助于平衡负载和数据分布。 在设计阶段的优化策略包括: 1. 使用基于日期的模板和rollover API滚动创建索引,以...
在本项目中,"C++ MFC实现图片随机选中生成器"是一个基于Microsoft Foundation Class (MFC) 库的C++应用程序,它为...在实际应用中,可以根据需求扩展功能,比如添加图片预览、设置抽奖规则、保存和加载抽奖记录等。
`CheckForIllegalCrossThreadCalls`属性被设置为`false`以避免线程同步错误,这意味着跨线程调用控件时不进行检查,但这可能导致数据一致性问题,因此在实际开发中应谨慎处理。 4. **控件和事件**:`comboBox1`、`...
- 集群架构的设计应根据实际业务需求,如描述中的13个节点,20多个索引,并采用日期滚动策略。每个索引10个分片,以应对每日大量的数据流入。 - 调优手段包括使用基于日期的索引模板,利用roll over API,设置别名...
然后,你可以根据项目中的指导编译源码,生成适合你所用Solr版本的JAR文件,并将其添加到Solr的lib目录下。启动Solr服务后,DIH调度器就会按照配置自动运行。 总的来说,"solr6--solr-dataimporthandler-scheduler-...
- **定时执行 force_merge**:在每天凌晨执行,帮助合并段并释放磁盘空间。 - **冷热数据分离**:将活跃数据放置在 SSD 上,提高访问速度;而较旧的数据则存储在成本较低的存储介质上,并通过 shrink 操作减少存储...
- **可扩展性**:设计任务时要考虑未来的扩展需求,确保新任务能轻松添加。 - **容错性**:为避免任务失败导致数据丢失,应设定重试策略和错误处理机制。 - **日志记录**:详细记录任务执行过程,便于问题排查和...
Sitemap(站点地图)是一种XML文件,它列出了网站的主要页面和子页面,帮助搜索引擎更好地理解和索引网站内容。...通过编写C#代码,你可以自定义Sitemap的生成方式,使其适应网站的具体需求,提高搜索引擎优化的效果。
- 设置定时任务,定期为栏目生成索引文件。 2. **清空** - **定义**: 清空功能可以清除选定栏目下的所有内容。 - **操作步骤**: - 选择需要清空的栏目。 - 点击“清空”按钮,并确认操作。 通过以上详细介绍...
6. **优化性能**:根据需求,可以考虑使用多线程并行索引、缓存策略、近实时搜索(NRT)等技术提高系统性能。例如,使用`NRTManager`可以实现快速响应的增量索引。 7. **安全与权限**:确保索引和搜索过程符合网站...
在IT行业中,SharePoint是一种广泛使用的协作平台,其强大的自定义功能使得开发人员可以构建定制化的解决方案以满足特定业务需求。本主题将深入探讨“创建自定义SharePoint定时任务(Timer Job)”,这是一种允许在...
- **问题描述**:某公司需要每天定时生成一份涉及多个部门的销售报表,但现有的SQL查询执行时间过长。 - **解决方案**: - 重构查询逻辑,合并重复的子查询为单个JOIN操作。 - 创建覆盖索引以减少额外的数据访问。...
5. **定时中断处理**:定时器的更新事件中断或比较事件中断被触发时,根据正弦波表的当前索引更新PWM通道的占空比,然后递增或递减索引。 6. **多路拓展**:若要输出多路SPWM,只需重复以上步骤,为每一路设置不同...