⑴ java Web 啟動時自動執行代碼的幾種方式
Web容器啟動後執行代碼的幾種方式
其執行順序為:
4===>5===>1===>2===>3
即指定init-method的Bean開始執行
接著實現spring的Bean後置處理器開始執行
然後是Servlet的監聽器執行
再接下來是Servlet的過濾器執行
最後才是Servlet執行
1、實現Servlet監聽器介面ServletContextListener
[java] view plain
public class InitListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent context) {
}
@Override
public void contextInitialized(ServletContextEvent context) {
// 上下文初始化執行
System.out.println("================>[ServletContextListener]自動載入啟動開始.");
SpringUtil.getInstance().setContext(
<span style="white-space:pre"> </span>WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext())
<span style="white-space:pre"> </span>);
}
}
然後在web.xml文件配置該監聽器
[html] view plain
<listener>
<listener-class>com.test.init.InitListener</listener-class>
</listener>
2、實現Servlet的過濾器Filter
[html] view plain
public class InitFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,
ServletException {
}
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("================>[Filter]自動載入啟動開始.");
// 讀取Spring容器中的Bean[此時Bean已載入,可以使用]
//寫啟動需要執行的代碼
System.out.println("================>[Filter]自動載入啟動結束.");
}
}
然後在web.xml文件配置過濾器即可
[html] view plain
<filter>
<filter-name>InitFilter</filter-name>
<filter-class>com.test.init.InitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>InitFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
3、編寫一個Servlet,在web.xml裡面配置容器啟動後執行即可
[html] view plain
public class InitServlet extends HttpServlet {
/**
*/
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) {
try {
super.init();
} catch (ServletException e) {
e.printStackTrace();
}
System.out.println("================>[Servlet]自動載入啟動開始.");
// 讀取Spring容器中的Bean[此時Bean已載入,可以使用]
//執行想要的代碼
System.out.println("================>[Servlet]自動載入啟動結束.");
}
}
然後在web.xml文件配置該Servlet的啟動方式為:容器啟動後執行
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.test.init.InitServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>test</param-value>
</init-param>
<!-- 此處指定載入順序為2,表明還有優先順序更高的Servlet要先執行 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
關於啟動後執行,由load-on-startup指定:
(1)當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet。值越小,啟動優先順序越高;
(2)當是一個負數時或者沒有指定時,表示該servlet被調用時才載入。
4、如果你使用Spring IOC作為Bean管理容器,那麼可以指定init-method其中init-method表示bean載入成功後,立即執行某個方法。配置如下:start為要執行的方法名稱
[html] view plain
<!-- service -->
<bean id="shopService" class="com.test.teach.service.ShopService" <span style="color:#33ffff;">init-method="start"</span>>
<property name="shopDao" ref="shopDao" />
</bean>
⑵ java WEB程序 每天自動執行某個操作
package com.timer.test; import java.util.Calendar; </SPAN></li>import java.util.Date; </SPAN></li>import java.util.Timer; </SPAN></li>import java.util.TimerTask; </SPAN></li> /**** </SPAN></li> * TimerTask與Timer * * @author bruceleey * */ public class TestTimer { </SPAN></li> static int count = 0; </SPAN></li> public static void showTimer() { </SPAN></li> TimerTask task = new TimerTask() { </SPAN></li> @Override </SPAN></li> public void run() { </SPAN></li> ++count; System.out.println("count執行了-->" + count); // 1次 </SPAN></li> } }; Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); </SPAN></li> int month = calendar.get(Calendar.MONTH)+1; </SPAN></li> int day = calendar.get(Calendar.DAY_OF_MONTH); </SPAN></li> /*** 定製每日00:24:00執行方法 ***/ </SPAN></li> calendar.set(year, month, day, 24, 24, 00); </SPAN></li> Date date = calendar.getTime(); Timer timer = new Timer(); </SPAN></li> timer.schele(task, date); } public static void main(String[] args) { </SPAN></li> showTimer(); } } 這個方法只要調用一次以後就會按時間自動執行,你可以在伺服器啟動的時候加入
⑶ java在web工程開發中如何實現多線程定時進行一項操作
給你寫個大概思路吧
//創建處理房間狀態的線程類,去執行改status的操作,操作在run方法里寫好
class ChangeRoomStatusProcess extends Thread {...}
//主線程創建線程池,數量自定,當前為5
ScheledExecutorService ses = Executors.newScheledThreadPool(5);
...
ses.shutdown();
//當某個線程將status設置為1以後,設置定時器,30秒後執行ChangeRoomStatusProcess的run方法
ses.schele(new ChangeRoomStatusProcess(), 30000, TimeUnit.MILLISECONDS);
⑷ JAVA定時執行任務,每天定時幾點鍾執行任務
案例: 你想讓他幾點執行都ok
1.MyJob02
//首先我們需要定義一個任務類,比如為MyJob02 ,
//該類需要繼承Job類,然後添加execute(JobExecutionContext context)方法,在
//這個方法中就是我們具體的任務執行的地方。
//由希望由調度程序執行的組件實現的介面
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 執行響應的任務.
System.out.println("HelloJob.execute,"+new Date());
}
2.
public static void main(String[] args) throws Exception {
//SchelerFactory 是一個介面,用於Scheler的創建和管理
SchelerFactory factory = new StdSchelerFactory();
//從工廠裡面拿到一個scheler實例
//計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,
//與調度程序交互的主要API
/*
* Scheler的生命期,從SchelerFactory創建它時開始,
到Scheler調用shutdown()方法時結束;Scheler被創建後,
可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作
(如暫停Trigger)。但是,Scheler只有在調用start()方法後,
才會真正地觸發trigger(即執行job)
*/
Scheler scheler = factory.getScheler();
//具體任務.
//用於定義作業的實例
//JobBuilder - 用於定義/構建JobDetail實例,用於定義作業的實例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即觸發器) - 定義執行給定作業的計劃的組件
//TriggerBuilder - 用於定義/構建觸發器實例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
scheler.scheleJob(job, trigger);
scheler.start();
}
⑸ 在java的Web開發過程中添加一個全局的定時器,如何處理
那就是所有打開的頁面共享數據咯
方案有二:
一、
1.每個頁面都添加定時器,
2.然後兩秒鍾或者5秒鍾用ajax訪問以下session,
如果session中的值比較小,就寫值進去,如果session中的值比較大,就讀值出來;這樣就保證了每個頁面上的計時器共享資源
二、與方案一唯一不同的一點就是,存值進cookie;
他們各有優缺點,
方案一的話:因為要計算請求時間,如果網速不好的話,就會有比較大的誤差。
方案二的話:必須的保證用戶的cookie沒有禁用,而實際上很多用戶的cookie都是禁用的。
個人比較喜歡第一種,如果真是沒人操作的話,那時間差一些也無關緊要,
又沒人看見。而且差的時間是多的,而不是少的,,多給用戶一些時間,說不定還能多拉一些用戶。
或者直接就不給給網速不好的用戶這項功能
再或者判斷網速不好的話就存cookie,如果cookie沒有開的話,就不管了
個人想法僅供參考
⑹ 如何用 Java 實現 Web 應用中的定時任務
首先,定時任務不是只存在web端的。只要是java寫的應用都可以用定時任務。
網上的開源庫也有不少,比如quartz
⑺ java web規定時間點擊按鈕
你可以用js前端定時器
setInterval("testFunction()",time);//time你寫時間就行,單位是毫秒,意思就是每隔好多time執行一次testFunction()函數。
⑻ Javaweb有哪些定時任務
TimerTask java自帶的定時類
Quartz 定時器任務框架
⑼ Java中如何讓web伺服器啟動的時候自動運行web程序中某個類的某個
1、首先讓需要自動運行的類繼承javax.servlet.http.HttpServlet
2、把需要自動運行的類中寫一個init方法。(servlet應用程序啟動的入口就是init方法)
publicvoidinit(){
System.out.println("這樣在web容器啟動的時候,就會執行這句話了!");
}
3、在web.xml中新建一個servlet,如下:
<servlet>
<servlet-name>GenerateData</servlet-name>
<servlet-class>com.yq.javaSCADA.business.impl.GenerateData</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
4、啟動的web伺服器,tomcat,weblogic,jboss,就會自動運行類中的init方法了。
⑽ Java下定時執行任務的方法有哪些
1)java.util.Timer
這個方法應該是最常用的,不過這個方法需要手工啟動你的任務:
Timer timer=new Timer();
timer.schele(new ListByDayTimerTask(),10000,86400000);
這里的ListByDayTimerTask類必須extends TimerTask裡面的run()方法。
2)ServletContextListener
這個方法在web容器環境比較方便,這樣,在web server啟動後就可以
自動運行該任務,不需要手工操作。
將ListByDayListener implements ServletContextListener介面,在
contextInitialized方法中加入啟動Timer的代碼,在contextDestroyed
方法中加入cancel該Timer的代碼;然後在web.xml中,加入listener:
詳細教程請參考: http://java.e800.com.cn/articles/2010/1012/1286862116545_1.html