国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - SSH框架網上商城項目第15戰之線程、定時器同步首頁數據

SSH框架網上商城項目第15戰之線程、定時器同步首頁數據

2020-05-11 11:24eson_15 JAVA教程

這篇文章主要為大家詳細介紹了SSH框架網上商城項目第15戰之線程、定時器同步首頁數據,感興趣的小伙伴們可以參考一下

上一節我們做完了首頁UI界面,但是有個問題:如果我在后臺添加了一個商品,那么我必須重啟一下服務器才能重新同步后臺數據,然后刷新首頁才能同步數據。這明顯不是我們想要的效果,一般這種網上商城首頁肯定不是人為手動同步數據的,那么如何解決呢?我們需要用到線程和定時器來定時自動同步首頁數據。
1. Timer和TimerTask
我們需要用到Timer和TimerTask兩個類。先來介紹下這兩個類。
Timer是一種工具類,在java.util包中,線程用其安排以后在后臺線程中執行的任務。可安排任務執行一次,或者定期重復執行。它有個構造函數:

?
1
2
Timer(boolean isDaemon)
//創建一個新計時器,可以指定其相關的線程作為守護程序運行。

守護線程即主線程結束后,該線程也結束,非守護線程即主線程結束后,該線程仍然繼續執行。isDaemon為true時為守護線程。Timer類有個schedule方法可以創建一個任務,如下:

?
1
2
3
4
5
void schedule(TimerTask task, Date firstTime, long period) 
//安排指定的任務在指定的時間開始進行重復的固定延遲執行。
//第一個參數是指定任務,即TimerTask對象;第二個參數為第一次開啟任務時間;
 
第三個參數為時間間隔,即每隔多長時間執行一次

我們再來看看TimerTask,TimerTask是用來創建一個新的線程任務的,它實現了Runnable接口,如果我們要創建一個新的線程任務,只需要繼承TimerTask,并重寫run方法即可。

2. 創建一個新的線程任務
下面我們來創建一個新的線程任務,用來更新后臺數據:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Component //把該對象交給Spring管理
public class ProductTimerTask extends TimerTask {
   
  @Resource
  private ProductService productService = null; //注入productService
  @Resource
  private CategoryService categoryService = null; //注入categoryService
   
  private ServletContext application = null; //定義一個ServletContext對象,因為我們更新了后臺數據后,需要存入application域里面
   
  public void setApplication(ServletContext application) {
    this.application = application; //通過監聽器將這個application對象set進來,因為這里是無法拿application對象的
  }
   
  @Override
   //和監聽器在項目啟動的時候數據初始化的邏輯一樣
  public void run() {
    System.out.println("----run----");
    List<List<Product>> bigList = new ArrayList<List<Product>>(); //bigList中存放一個裝有Category類的list
     // 1. 查詢出熱點類別
    for(Category category : categoryService.queryByHot(true)) {
      //根據熱點類別id獲取推薦商品信息
      List<Product> lst = productService.querByCategoryId(category.getId());
      bigList.add(lst); //將裝有category的list放到bigList中
    }
     // 2. 把查詢的bigList交給application內置對象
     application.setAttribute("bigList", bigList); //假設我們已經拿到了application對象
  }
 
}

接下來,我們修改項目啟動時監聽器里面的內容,原本上面的這個查詢操作是放在監聽器中,當項目啟動時,監聽器開始執行,獲取后臺數據,存到application域中,然后前臺通過jstl標簽從application域中拿到數據。現在我們把這些事情交給我們定義的ProductTimerTask去做,那么監聽器中只要設置一下定時器,讓ProductTimerTask定時去更新一下后臺數據即可。看看監聽器中修改后的代碼:

3. 在監聽器中啟動定時器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//@Component //監聽器是web層的組件,它是tomcat實例化的,不是Spring實例化的。不能放到Spring中
public class InitDataListener implements ServletContextListener {
   
  private ProductTimerTask productTimerTask = null; //定義一個ProductTimerTask對象
  private ApplicationContext context = null;
   
  @Override
  public void contextDestroyed(ServletContextEvent event) {
    // TODO Auto-generated method stub
 
  }
 
  @Override
  public void contextInitialized(ServletContextEvent event) {
 
    context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());        
    productTimerTask = (ProductTimerTask) context.getBean("productTimerTask");//從配置文件中獲取ProductTimerTask對象
 
    //把內置對象交給productTimerTask,因為productTimerTask里面是拿不到application的,只能通過監聽器set給它
    productTimerTask.setApplication(event.getServletContext());
 
    //通過設置定時器,讓首頁的數據每個一小時同步一次(配置為守護線程)
    new Timer(true).schedule(productTimerTask, 0, 1000*60*60);//每個一小時執行一次productTimerTask任務,即更新一下后臺數據
  }
 
}

 關于InitDataListener監聽器中原來的操作代碼,可以對比上一節中的內容,其實就是ProductTimerTask中的更新后臺數據,只不過現在放到TimerTask中去做了而已。這樣我們就完成了使用線程和定時器定期同步首頁數據,這個時間間隔可以自己設定。
其實CSDN博客里的部分首頁數據也不是實時更新的,每天晚上會有個時間更新一次,例如左側欄目中的博客排名,閱讀排行后的顯示的閱讀量等,這些都是每天晚上更新一次,應該就是在后臺設置了每天更新一次,原理跟這里應該是一樣的。這樣也減輕了服務器的壓力。

本文鏈接:http://blog.csdn.net/eson_15/article/details/51387378

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕精品视频 | 国产精品国产三级国产aⅴ 亚洲精品免费在线观看 | 爱色区综合网 | 日韩成人在线免费观看 | 中文字幕在线观看不卡视频 | 欧美日韩一区二区三区在线观看 | 亚洲成人精品在线 | 国产一区影院 | 亚洲一区中文字幕在线观看 | 一本色道久久综合狠狠躁篇的优点 | 最近日本韩国高清免费观看 | 午夜视频精品 | 日韩欧美第一页 | 久久综合久 | 成人国产精品视频 | 国产精品亚洲成在人线 | 亚洲福利精品视频 | 国产精品毛片 | 9999热视频 | 中文字幕久久久 | 综合色播 | 国产欧美日韩在线 | 久久亚洲精品裙底抄底 | 国产精品欧美一区二区三区不卡 | 人人爽在线观看 | 毛片视频免费播放 | 中文字幕欧美日韩 | www.欧美视频 | 成人精品一区二区三区中文字幕 | 国产精品免费一区二区 | 黄色福利视频 | 综合色成人 | 久久久夜色精品亚洲 | 国产精品成av人在线视午夜片 | 国产精品久久久久久久浪潮网站 | 亚洲欧美在线观看 | 日韩电影在线看 | 国产毛片一区二区 | 国产欧美日韩综合精品一区二区 | 综合伊人 | 亚洲国产精品一区二区三区 |