定时任务、在线急等、谢谢各位哥!!!!

类似于视频类的软件
用的数据库是mysql
大概需求是: 视频分为两种一种是免费的、一种是有时效的、时效在表中为一个字段(int类型表示的是小时数)、现在需要写个定时任务来实现自动检测视频表中的每条有时效的视频、一旦时效超过当前日期、便修改该条记录。
根据找资料、发现mysql数据库中函数加时间可以时间、后台中用@Scheduled或者Timer都可以大致实现
请问那种方式比较高性能、具体还需要注意些什么!!!谢谢啦

timer定时器高效快速些,它会开启一个新的线程

spring的 scheduled的使用注解的方式:
首先要配置spring.xml

xmlns 多加下面的内容、
xmlns:task="http://www.springframework.org/schema/task"

然后xsi:schemaLocation多加下面的内容、
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.1.xsd

最后是task任务扫描注解
task:annotation-driven/

我的配置扫描位置是:
context:annotation-config/

扫描的是com.test这样的包下的内容、
下面需要接口和实现(我的这几个java文件都是com.test的包下的、)
public interface IMyTestService {
public void myTest();
}

@Component //import org.springframework.stereotype.Component;
public class MyTestServiceImpl implements IMyTestService {
@Scheduled(cron="0/5 * * * * ? ") //每5秒执行一次
@Override
public void myTest(){
System.out.println("进入测试");
}
}
需要注意的几点:
1、spring的@Scheduled注解 需要写在实现上、
2、 定时器的任务方法不能有返回值(如果有返回值,spring初始化的时候会告诉你有个错误、需要设定一个proxytargetclass的某个值为true、具体就去百度google吧)
3、实现类上要有组件的注解@Component

剩下的就是corn表达式了、具体使用以及参数请百度google、
下面只例出几个式子
CRON表达式 含义
"0 0 12 * * ?" 每天中午十二点触发
"0 15 10 ? * *" 每天早上10:15触发
"0 15 10 * * ?" 每天早上10:15触发
"0 15 10 * * ? *" 每天早上10:15触发
"0 15 10 * * ? 2005" 2005年的每天早上10:15触发
"0 * 14 * * ?" 每天从下午2点开始到2点59分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14:44触发
"0 15 10 ? * MON-FRI" 每个周一、周二、周三、周四、周五的10:15触发

***********************************timer
1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。
对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
private java.util.Timer timer;
timer = new Timer(true);
timer.schedule(
new java.util.TimerTask() { public void run()
{ //server.checkNewMail(); 要操作的方法} }, 0, 5*60*1000);
第一个参数是要操作的方法,第二个参数是要设定延迟的时间,第三个参
数是周期的设定,每隔多长时间执行该操作。
使用这几行代码之后,Timer本身会每隔5分钟调用一遍
server.checkNewMail()方法,不需要自己启动线程。Timer本身也是多线程同
步的,多个线程可以共用一个Timer,不需要外部的同步代码。
2、
(1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的
任务。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定
的任务在指定的时间开始进行重复的固定延迟执行.
(3)Timer.schedule(TimerTask task,long delay)安排在指定延迟后执行指定的
任务.
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任务
从指定的延迟后开始进行重复的固定延迟执行.
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
安排指定的任务在指定的时间开始进行重复的固定速率执行.
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安
排指定的任务在指定的延迟后开始进行重复的固定速率执行.
用Java Timer API 进行时间调度开发的相关注意点
java.util这个包中可以找到Timer和TimerTask这两个类。Timer直接从Object
继承,它相当于一个计时器,能够用它来指定某个时间来执行一项任务,或者
每隔一定时间间隔反复执行同一个任务。创建一个Timer后,就会生成一个线程
在背后运行,来控制任务的执行。而TimerTask就是用来实现某项任务的类,
它实现了Runnable接口,因此相当于一个线程。
如何实现自己的任务调度?
1、继承TimerTask,注意TimerTask是实现Runnable接口的,因此只要重载run()
方法即可。
2、创建Timer对象,调用schedule()方法。

为何 不是在访问每个视频的时候去判断这个视频的状态呢。

看了你的问题才晓得mysql还能执行定时任务……
http://blog.csdn.net/mer1234567/article/details/7514855
http://blog.csdn.net/tjcyjd/article/details/11481459
这个是介绍mysql定时任务的,不知道对你有不有帮助