前のセクションでは、ホームページUIインターフェイスを終了しましたが、問題があります。バックグラウンドに製品を追加する場合、サーバーを再起動して背景データを再調整し、ホームページを更新してデータを同期する必要があります。これは明らかに私たちが望む効果ではありません。一般的に、この種のオンラインモールホームページは間違いなく手動で同期していないので、それを解決する方法は?スレッドとタイマーを使用して、ホームページデータを定期的に自動的に同期する必要があります。
1。タイマーとティマタスク
タイマーとティマタスクのクラスを使用する必要があります。最初にこれら2つのカテゴリを紹介しましょう。
タイマーはツールクラスです。 java.utilパッケージでは、スレッドを使用して、後でバックグラウンドスレッドで実行されるタスクを手配します。タスクは一度実行することも、定期的に実行することもできます。コンストラクターがあります:
タイマー(Boolean IsDaemon)//デーモンとして実行するように関連するスレッドを指定できる新しいタイマーを作成します。
デーモンのスレッド、つまりメインスレッドが終了し、スレッドも終了し、非デーモンスレッド、つまりメインスレッドが終了した後、スレッドは実行され続けます。 Isdaemonが真実である場合、それはデーモンスレッドです。タイマークラスには、次のようにタスクを作成できるスケジュールメソッドがあります。
voidスケジュール(Timertaskタスク、初めて、長期間)//指定されたタスクをスケジュールして、指定された時間に繰り返し固定遅延実行を実行します。 //最初のパラメーターは、指定されたタスク、つまりTimerTaskオブジェクトです。 2番目のパラメーターは、最初のタスク開幕時間です。 3番目のパラメーターは時間間隔です。つまり、毎回実行するのにどれくらい時間がかかりますか
Timertaskを見てみましょう。 TimerTaskは、新しいスレッドタスクを作成するために使用されます。実行可能なインターフェイスを実装します。新しいスレッドタスクを作成したい場合は、Timertaskを継承して実行方法を書き直すだけです。
2。新しいスレッドタスクを作成します
背景データを更新するための新しいスレッドタスクを作成しましょう。
@Component //オブジェクトをスプリングマネジメントに残してくださいパブリッククラスProductTimerTask拡張TimerTask {@Resource Private Productservice Productservice = null; // Inject Productservice @Resource Private CategoryService CategoryService = null; // Inject categoryservice private servletcontext application = null; // servletcontextオブジェクトを定義します。背景データを更新した後、アプリケーションドメインpublic void setApplication(servletcontextアプリケーション)に保存する必要があるため{this.application = application; //アプリケーションオブジェクトをここで使用できないため、このアプリケーションオブジェクトをリスナーに設定します} @Override //プロジェクトがpublic void run(){system.out.println( "--------")を開始すると、リスナーのデータ初期化と同じロジックリスト<リスト<製品>> biglist = new arrayList <list <froct >>(); // biglistのカテゴリクラスを備えたリストの保存biglist.add(lst); //カテゴリをbigList} // 2に配置します。/ //アプリケーションオブジェクトがあるとします}}次に、プロジェクトの開始時にリスナーのコンテンツを変更します。上記の元のクエリ操作は、リスナーに配置されました。プロジェクトが開始されると、リスナーは実行を開始し、バックグラウンドデータを取得し、アプリケーションドメインに保存します。その後、フォアグラウンドはJSTLタグを介してアプリケーションドメインからデータを取得します。次に、これらのことを定義したProductTimertaskに引き渡すので、リスナーにタイマーを設定し、ProductTimertaskに背景データを定期的に更新させます。リスナーの変更されたコードをチェックしてください。
3.リスナーでタイマーを起動します
//@component //リスナーはWebレイヤーのコンポーネントです。春ではなく、Tomcatによってインスタンス化されています。春の公開クラスに置くことはできませんinitdatalistener servletcontextlistener {private producttimertask producttimertask = null; // ProductTimerTaskオブジェクトPrivate ApplicationContext Context = nullを定義します。 @Override public void contextDestroyed(servletContextevent Event){// todo auto-enerated method stub} @override public void contextInitialized(servletcontextevent event){context = webapplicationcontextutils.getwebapplicationContext(event.getServletContext(); ProductTimerTask =(ProductTimerTask)Context.GetBean( "ProductTimertask"); //構成ファイルからProductTimerTaskオブジェクトを取得// Builtin ObjectをProductTimerTaskに話します。ProductTimerTaskはアプリケーションを取得できないため、リスナーセットProductTimertask.SetApplication(Event.getServletcontext(); //タイマーを設定してホームページのデータを1時間に1回同期する(デーモンスレッドとして構成)新しいタイマー(true).schedule(producttimertask、0、1000*60*60); initdatalistenerリスナーの元の操作コードについては、前のセクションのコンテンツを比較できます。実際、それはProductTimertaskの更新バックグラウンドデータですが、今のところTimertaskに入れられています。このようにして、スレッドとタイマーの使用を完了してホームページデータを定期的に同期させます。この時間間隔は、自分で設定できます。
実際、CSDNブログの一部のホームページデータはリアルタイムで更新されていません。左の列のブログのランキング、読み取り後に表示されるビューの数など、毎晩更新する時間があります。これらは毎晩更新され、1日1回更新するために背景に設定する必要があります。原則はここと同じでなければなりません。これにより、サーバーの圧力も軽減されます。
この記事へのリンク:http://blog.csdn.net/eson_15/article/details/51387378
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。