當前位置:首頁 » 操作系統 » 資料庫定時器

資料庫定時器

發布時間: 2022-05-08 23:16:45

1. 我在linux下寫了一個定時器,每過一分鍾將數據讀入資料庫一次,但是在運行的過程中,只運行一分鍾就段錯誤

1、你的段錯誤不是發生在這些代碼中,需要調試都能確定到底發生在哪裡。你可以先不用定時器,只循環地調用幾次數據操作看,一點點地隔離,找出越界的指針。
2、while(1);這種方式最好不要用,它可能會將CPU佔到100%,實現要用的話循環里加個sleep吧。

2. Mysql定時器可以設置執行次數嗎

mysql要實現定時執行sql語句就要用到Event

具體操作如下:

先看看看event 事件是否開啟
show variables like '%sche%';

如沒開啟,則開啟。需要資料庫超級許可權
set global event_scheler =1;

創建存儲過程 update_a (註:就是你要執行的sql語句)
mysql> create procere update_a() update a set a.y_avg=(select avg(b.youhao) from b where a.a_id=b.a_id);

創建一個定時任務:event e_updateA
mysql> create event if not exists e_updateA
-> on schele every 60 second ---設置60秒執行一次

-> on schele at date_add(now(),interval 1 minute) ---在一分鍾後執行

-> on completion preserve
-> do call update_a(); ---執行update_a()存儲過程

創建Event之後,sql語句就定時執行一次。

關閉事件任務

3. 資料庫集群,怎麼解決spring定時器的重復問題

有兩種流行Spring定時器配置:java的Timer類和OpenSymphony的Quartz。

1.Java Timer定時

首先繼承java.util.TimerTask類實現run方法

import java.util.TimerTask;
public class EmailReportTask extends TimerTask{
@Override
public void run() {
...
}
}
在Spring定義

...

配置Spring定時器

<bean id="scheleReportTask" class="org.springframework.scheling.timer.ScheledTimerTask">
<property name="timerTask" ref="reportTimerTask" />
<property name="period">
<value>86400000value>
property>
bean>
timerTask屬性告訴ScheledTimerTask運行哪個。86400000代表24個小時

啟動Spring定時器

Spring的TimerFactoryBean負責啟動定時任務

<bean class="org.springframework.scheling.timer.TimerFactoryBean">
<property name="scheledTimerTasks">
<list><ref bean="scheleReportTask"/>list>
property>
bean>
scheledTimerTasks里顯示一個需要啟動的定時器任務的列表。
可以通過設置delay屬性延遲啟動
<bean id="scheleReportTask" class="org.springframework.scheling.timer.ScheledTimerTask">
<property name="timerTask" ref="reportTimerTask" />
<property name="period">
<value>86400000value>
property>
<property name="delay">
<value>3600000value>
property>
bean>
這個任務我們只能規定每隔24小時運行一次,無法精確到某時啟動

2.Quartz定時器

首先繼承QuartzJobBean類實現executeInternal方法

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheling.quartz.QuartzJobBean;

public class EmailReportJob extends QuartzJobBean{
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
...
}
}
在Spring中定義

<bean id="reportJob" class="org.springframework.scheling.quartz.JobDetailBean">
<property name="jobClass">
<value>EmailReportJobvalue>
property>
<property name="jobDataAsMap">
<map>
<entry key="courseService">
<ref bean="courseService"/>
entry>
map>
property>
bean>
在這里我們並沒有直接聲明一個EmailReportJob Bean,而是聲明了一個JobDetailBean。這個是Quartz的特點。JobDetailBean是Quartz的org.quartz.JobDetail的子類,它要求通過jobClass屬性來設置一個Job對象。

使用Quartz的JobDetail中的另一個特別之處是EmailReportJob的courseService屬性是間接設置的。JobDetail的jobDataAsMap屬性接受一個Map,包括設置給jobClass的各種屬性,當。JobDetailBean實例化時,它會將courseService Bean注入到EmailReportJob 的courseService 屬性中。

啟動定時器

Quartz的org.quartz.Trigger類描述了何時及以怎樣的頻度運行一個Quartz工作。Spring提供了兩個觸發器SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean與scheledTimerTasks類似。指定工作的執行頻度,模仿scheledTimerTasks配置 .

<bean id="simpleReportTrigger" class="org.springframework.scheling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="reprotJob" />
<property name="startDelay">
<value>360000value>
property>
<property name="repeatInterval">
<value>86400000value>
property>
bean>
startDelay也是延遲1個小時啟動

CronTriggerBean指定工作的准確運行時間

<bean id="cronReportTrigger" class="org.springframework.scheling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reprotJob" />
<property name="cronExpression">
<value>0 0 6 * * ?value>
property>
bean>
屬性cronExpression告訴何時觸發。最神秘就是cron表達式:

Linux系統的計劃任務通常有cron來承擔。一個cron表達式有至少6個(也可能7個)有空格分隔的時間元素。從左到右:

1.秒2.分3.小時4.月份中的日期(1-31)5.月份(1-12或JAN-DEC)6.星期中的日期(1-7或SUN-SAT)7.年份(1970-2099)
每個元素都顯示的規定一個值(如6),一個區間(9-12),一個列表(9,11,13)或一個通配符(*)。因為4和6這兩個元素是互斥的,因此應該通過設置一個問號(?)來表明不想設置的那個欄位,「/」如果值組合就表示重復次數(10/6表示每10秒重復6次)。

啟動定時器

<bean class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list><ref bean="cronReportTrigger"/>list>
property>
bean>
triggers屬性接受一組觸發器。

4. oracle資料庫用了定時器查詢資料庫,每一分鍾查詢一次,一段時間後導致資料庫最大連接數太大

你每次查詢都是新開一個連接嗎?還是使用同一個連接?

如果每次都是新連接的話,那每次使用後,都要把對應的連接關閉掉。

同一個連接就沒有關系了。

5. js定時器怎麼和資料庫進行交互

這裡面關聯的全掏出來的話,夠挑好機挑,只能簡易描述一下可以:
setInterval或setTimeout這兩個都可以實現,
setinterval為恆定運行時使用比較合適,如時間在跳,
setTimeout為條件滿足時繼續輪詢比較合適,如升一級給下一個任務一樣,
setTimeout("fun()",5000);5秒後執行fun()這個過程
function
fun(){
//這里要啟動AJAX模型,向伺服器發出GET或POST請求,
//如:接受為:user.php,PHP程序訪問資料庫進行處理
//返回responseText,JS可以調用,
//如果返回的結果你滿意,允許繼續輪詢就啟動setTimeout("fun()",5000);
//這樣一來你就看到了一個自運行的一個機制了。。
//具體代碼太多,無法展示。。。
}

6. 我想問下我設定了定時器,每5秒從資料庫讀數據,但是發現後來讀完了沒數據了,還繼續讀,結果出錯了

if的邏輯可能出錯了.你應該有這樣的思想:如果已經讀完,就應該出現跳出循環的狀態.if
else中間的邏輯再思考一次.
C#語言的語法,我不是很懂,不好意思.

7. oracle資料庫怎麼創建定時任務

工作中,我們使用的資料庫大部分是oracle、mysql、db2、sql server等資料庫,在使用oracle最匹配的工具plsql的時候,如果用plsql創建定時器呢看下面我簡單介紹使用工具創建定時器的方法。

熱點內容
2013年二級c語言真題 發布:2024-10-08 10:44:47 瀏覽:243
linux的locale 發布:2024-10-08 10:44:36 瀏覽:91
2rsa演算法 發布:2024-10-08 10:29:53 瀏覽:542
南京社保密碼多少 發布:2024-10-08 10:21:01 瀏覽:472
國內的少兒編程 發布:2024-10-08 10:21:00 瀏覽:521
vscode編譯調試閃退 發布:2024-10-08 10:19:27 瀏覽:671
oracle資料庫用戶許可權 發布:2024-10-08 09:46:00 瀏覽:708
立方的演算法口訣 發布:2024-10-08 09:44:30 瀏覽:820
python輸入到excel表格 發布:2024-10-08 09:36:31 瀏覽:285
腳本拒絕訪問閃退 發布:2024-10-08 09:34:55 瀏覽:939