이전 섹션에서는 홈페이지 UI 인터페이스를 완료했지만 문제가 있습니다. 백그라운드에 제품을 추가하면 서버를 다시 시작하여 배경 데이터를 재 동기화 한 다음 홈 페이지를 새로 고쳐 데이터를 동기화해야합니다. 이것은 분명히 우리가 원하는 효과가 아닙니다. 일반적으로 이러한 종류의 온라인 쇼핑몰 홈페이지는 수동으로 동기화 된 데이터가 아니므로 어떻게 해결 하는가? 홈페이지 데이터를 정기적으로 자동으로 동기화하기 위해 스레드와 타이머를 사용해야합니다.
1. 타이머 및 타이머 스탁
타이머 및 타이머 스로크 클래스를 사용해야합니다. 이 두 범주를 먼저 소개하겠습니다.
타이머는 도구 클래스입니다. Java.util 패키지에서 스레드는이를 사용하여 나중에 백그라운드 스레드에서 실행되는 작업을 정렬합니다. 작업을 한 번 실행하거나 정기적으로 실행할 수 있습니다. 생성자가 있습니다.
타이머 (부울 Isdaemon) // 관련 스레드를 데몬으로 실행할 수있는 새 타이머를 만듭니다.
데몬 스레드, 즉 메인 스레드가 끝나고 스레드도 끝나고, 비 데몬 스레드, 즉 메인 스레드가 끝나면 스레드가 계속 실행됩니다. Isdaemon이 참이면 데몬 스레드입니다. 타이머 클래스에는 다음과 같이 작업을 생성 할 수있는 일정 방법이 있습니다.
무효 일정 (Timertask 작업, 날짜 초기, 장기) // 지정된 고정 지연 실행을 수행하도록 지정된 작업을 예약하십시오. // 첫 번째 매개 변수는 지정된 작업, 즉 TimerTask 객체입니다. 두 번째 매개 변수는 첫 번째 작업 개방 시간입니다. 세 번째 매개 변수는 시간 간격, 즉 매번 실행하는 데 얼마나 걸립니까?
Timertask를 살펴 보겠습니다. Timertask는 새로운 스레드 작업을 만드는 데 사용됩니다. 실행 가능한 인터페이스를 구현합니다. 새 스레드 작업을 만들려면 타이머 스탁을 상속하고 실행 메소드를 다시 작성하면됩니다.
2. 새 스레드 작업을 만듭니다
배경 데이터를 업데이트하기 위해 새 스레드 작업을 작성하겠습니다.
@component // 객체를 스프링 관리 공개 클래스 공개 클래스로 남겨 둡니다. // productsErvice @Resource 개인 카테고리 서비스 카테고리 카테고리를 주입합니다. // 카테고리를 주입합니다. // ServletContext 객체를 정의하십시오. 배경 데이터를 업데이트 한 후에는 응용 프로그램 도메인 공개 void setApplication (ServletContext Application) {this.application = application; // 응용 프로그램 객체를 여기에서 가져갈 수 없기 때문에이 응용 프로그램 객체를 청취자를 통해 설정합니다.} @override // 프로젝트가 공개 void run () {system.out.println ( "--------")을 시작할 때 리스너의 데이터 초기화와 동일한 논리; 목록 <list <product>> biglist = new Arraylist <list <product>> (); // biglist에서 카테고리 클래스로 목록을 저장하십시오. // 1. (카테고리 카테고리 : categoryservice.querybyhot (true)) {// 핫 카테고리 ID 목록을 기반으로 권장되는 제품 정보를 얻습니다. biglist.add (lst); // BIGLIST에 카테고리로 목록을 넣습니다.} // 2. 쿼리 BIGLIST를 응용 프로그램 내장 객체 응용 프로그램에 두십시오. // 응용 프로그램 객체가 있다고 가정합니다}}다음으로 프로젝트가 시작될 때 청취자의 내용을 수정합니다. 위의 원래 쿼리 작업은 리스너에 배치되었습니다. 프로젝트가 시작되면 청취자가 실행되기 시작하고 배경 데이터를 얻고 응용 프로그램 도메인에 저장합니다. 그런 다음 전경은 JSTL 태그를 통해 응용 프로그램 도메인의 데이터를 가져옵니다. 이제 우리는 이러한 것들을 정의한 ProductTimertASK에 넘겨 주므로 리스너에 타이머를 설정하고 ProductTimertASK가 배경 데이터를 정기적으로 업데이트하도록하십시오. 리스너의 수정 된 코드를 확인하십시오.
3. 리스너에서 타이머를 시작하십시오
// component // Listener는 웹 계층의 구성 요소입니다. 그것은 봄이 아닌 Tomcat에 의해 인스턴스됩니다. Spring Public Class InitDatalistener 구현 ServletContextListener {Private ProductTimertAsk ProductTimertASK = NULL; // ProductTimerTask 객체 정의 개인 ApplicationContext Context = NULL; @override public void contextDestroyed (servletcontextevent event) {// todo 자동 생성 메소드 스터브} @override public void contextinitialized (servletcontextevent event) {컨텍스트 = webApplicationContutils.getWebApplicationContext (event.getServletContxt ()); ProductTimerTask = (ProductTimerTask) Context.getBean ( "ProductTimertAsk"); // 구성 파일에서 ProductTimertASK 개체를 가져옵니다. // ProductTimerTASK가 응용 프로그램을 얻을 수 없기 때문에 내장 객체를 ProductTimerTask에 대해 이야기합니다. // 홈페이지의 데이터를 한 번에 한 번 (데몬 스레드로 구성) 새 타이머 (true) .schedule (ProductTimertASK, 0, 1000*60*60); // 1 시간마다 한 번에 한 번에 ProductTimertASK 작업을 실행합니다. 즉, 배경 데이터를 업데이트하도록 타이머를 설정하십시오. InitDatalistener 리스너의 원래 조작 코드와 관련하여 이전 섹션의 내용을 비교할 수 있습니다. 실제로 ProductTimertASK의 업데이트 배경 데이터이지만 현재 타이머 스커트에 넣었습니다. 이런 식으로, 우리는 홈페이지 데이터를 정기적으로 동기화하기 위해 스레드와 타이머를 사용 하여이 시간 간격을 직접 설정할 수 있습니다.
실제로 CSDN 블로그의 일부 홈페이지 데이터는 실시간으로 업데이트되지 않습니다. 왼쪽 열의 블로그 순위, 순위를 읽은 후 표시된 뷰 수 등과 같은 매일 밤 업데이트 할 시간이 있습니다. 매일 밤 업데이트되며 하루에 한 번 업데이트하도록 설정해야합니다. 원칙은 여기와 동일해야합니다. 이것은 또한 서버의 압력을 줄입니다.
이 기사에 대한 링크 : http://blog.csdn.net/eson_15/article/details/51387378
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.