项目首页数据静态化的技术实现
2014-06-26 15:19
85 查看
项目首页数据静态化的实现思路:(在做商城项目的时候总结出来的方法)
1. 首先在项目中配置一个监听器类InitDataListener.java,该监听器实现了ServletContextListener接口,
在重写方法contextInitialized()中获取并调用自定义的时间任务工具类,并创建一个定时器每隔一段时间
调用自定义的时间任务工具类,定时更新首页数据;
2. 然后具体分析自定义的时间任务工具类,这是一个线程的实现类,在项目启动的时候完成商品数据的加载(调用
业务逻辑类的方法,查询到首页商品并存储到application内置对象中去) .
监听器类InitDataListener.java具体代码实现如下:
==================================================================================
/**
* @Title: InitDataListener.java
* @author Administrator
* @Description: web.xml中配置一个数据初始化的监听器【项目首页数据静态化】
*/
public class InitDataListener implements ServletContextListener {
private ApplicationContext context;
private ProductTimerTask productTimerTask;
@Override
public void contextDestroyed(ServletContextEvent event) { }
@Override
public void contextInitialized(ServletContextEvent event) {
// 获取上下文对象
context=WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
// 通过context获取时间任务工具类
productTimerTask=(ProductTimerTask)context.getBean("productTimerTask");
// 通过set方法赋值 application内置对象
productTimerTask.setApplication(event.getServletContext());
// 创建一个定时器,启动的时候执行一次,以后每24小时同步一次
new Timer(true).schedule(productTimerTask, 0,1000*60*60);
}
}
==================================================================================
时间任务工具类ProductTimerTask .java具体代码实现如下:
==================================================================================
/**
* @Title: ProductTimerTask .java
* @author Administrator
* @Description: 线程的实现类: 用来启动的时候加载商品的数据,而且每隔一段时间定时加载【此类可以设置为单例模式】
*/
@Component("productTimerTask")
public class ProductTimerTask extends TimerTask {
@Resource
private CategoryService categoryService;
@Resource
private ProductService productService;
// 从监听器中通过set方法赋值
private ServletContext application;
public void setApplication(ServletContext application) {
this.application = application;
}
@Override // 完成首页商品数据的加载和定时更新的功能
public void run() {
// 调用业务逻辑方法,查询首页商品,然后存储到app中
List<List<Product>> bigList=new ArrayList<List<Product>>();
for(Category category:categoryService.queryByHot(true)){
// 查询当前热点类别推荐商品
List<Product> productList = productService.queryByCid(category.getId());
bigList.add(productList);
}
application.setAttribute("bigList", bigList);
}
}
1. 首先在项目中配置一个监听器类InitDataListener.java,该监听器实现了ServletContextListener接口,
在重写方法contextInitialized()中获取并调用自定义的时间任务工具类,并创建一个定时器每隔一段时间
调用自定义的时间任务工具类,定时更新首页数据;
2. 然后具体分析自定义的时间任务工具类,这是一个线程的实现类,在项目启动的时候完成商品数据的加载(调用
业务逻辑类的方法,查询到首页商品并存储到application内置对象中去) .
监听器类InitDataListener.java具体代码实现如下:
==================================================================================
/**
* @Title: InitDataListener.java
* @author Administrator
* @Description: web.xml中配置一个数据初始化的监听器【项目首页数据静态化】
*/
public class InitDataListener implements ServletContextListener {
private ApplicationContext context;
private ProductTimerTask productTimerTask;
@Override
public void contextDestroyed(ServletContextEvent event) { }
@Override
public void contextInitialized(ServletContextEvent event) {
// 获取上下文对象
context=WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
// 通过context获取时间任务工具类
productTimerTask=(ProductTimerTask)context.getBean("productTimerTask");
// 通过set方法赋值 application内置对象
productTimerTask.setApplication(event.getServletContext());
// 创建一个定时器,启动的时候执行一次,以后每24小时同步一次
new Timer(true).schedule(productTimerTask, 0,1000*60*60);
}
}
==================================================================================
时间任务工具类ProductTimerTask .java具体代码实现如下:
==================================================================================
/**
* @Title: ProductTimerTask .java
* @author Administrator
* @Description: 线程的实现类: 用来启动的时候加载商品的数据,而且每隔一段时间定时加载【此类可以设置为单例模式】
*/
@Component("productTimerTask")
public class ProductTimerTask extends TimerTask {
@Resource
private CategoryService categoryService;
@Resource
private ProductService productService;
// 从监听器中通过set方法赋值
private ServletContext application;
public void setApplication(ServletContext application) {
this.application = application;
}
@Override // 完成首页商品数据的加载和定时更新的功能
public void run() {
// 调用业务逻辑方法,查询首页商品,然后存储到app中
List<List<Product>> bigList=new ArrayList<List<Product>>();
for(Category category:categoryService.queryByHot(true)){
// 查询当前热点类别推荐商品
List<Product> productList = productService.queryByCid(category.getId());
bigList.add(productList);
}
application.setAttribute("bigList", bigList);
}
}
相关文章推荐
- 大数据Spark“蘑菇云”行动第53课: Spark大型项目广告点击项目技术骨架实现之Spark+Kafka+Flume实战 项目!!!大项目!!!超大型大数据项目!!!
- JAVA_WEB项目(结合Servlet+jsp+ckEditor编辑器+jquery easyui技术)实现新闻发布管理系统第四篇:前台首页,新闻分类(体育新闻,科技新闻等),新闻列表分页的实现
- 新浪微博项目---首页技术点三.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现)
- SmartSoft技术管理系统实现之:数据表ID实现
- 项目实战之中小网站数据缓存的设计与实现
- 如何实现win9X进程间数据通讯技术
- 项目经验技术总结三:系统业务基础数据维护
- Step1数据系统技术(3.使用浏览器Cache和http状态码304实现的客户端缓存)
- 利用javascript从数据库取数据来实现CSDN首页图片的切换效果
- 在部署项目时实现自动安装FrameWork及数据访问部件
- 利用复制技术实现数据同步更新
- 开源项目 开发心得 (2) 之 Mail Monitor(邮件监测器) Part II.(技术是怎样实现的)
- 如何实现进程间数据通讯技术
- 基于IP的可靠数据传输堆栈实现技术点
- 从SQL Server向Oracle迁移的技术实现方案(一)数据类型的迁移
- 在部署项目时实现自动安装FrameWork及数据访问部件
- DAO类+通用持久类+通用动态formBean类,实现数据增、删、改、查newxy(新坐标)技术运用之三
- [资料]如何实现进程间数据通讯技术
- 实现进程间数据通讯技术