您的位置:首页 > 其它

项目首页数据静态化的技术实现

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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐