java 后台系统实现动态新闻列表实时更新
1.⾸先我们有了这样⼀个需求:实现⽹站的动态数据更新,前台滚动刷新.
em用法⼀个⼈说:我们可以再前台设置ajax定时发起请求,动态请求数据,并刷新页⾯.
分析:功能实现,技术简单
缺点:倘若系统的使⽤量较⼤,每个⽤户长时间驻留页⾯都会发起⼤量的后台请求,并查询数据库,数据库压⼒增⼤
这也是⼀种实现⽅法,虽然实现了功能但是并不适合⼤数据量的⽹站.
巴西世界杯赛程
其实我们仔细分析⼀下,我们只是需要所有⽤户展⽰动态数据,那么有什么是所有⽤户都可以共享的尼?对,恭喜你想到了,application域.我们只要每个⼀定的时间就将最新的数据取出,⽐如10条数据取出,放到application域中,然后后台每次请求application 域中的数据即可.这样每个⽤户请求都不会穿透数据库.
说⼲就⼲
假设系统是spring系统,那么我们如何执⾏定时任务尼
三种⽅案:
jdk的timertask,
spring的定时任务,
quartz的定时任务调度
这⾥采⽤第⼆种:实现简单,定时实现:
开启定时注解:
定时⽅法实现简单,但是难点我们如何定时对象中获取spring容器对象和web的application域对象
好了不卖关⼦了,
spring容器对象获取可以继承ApplicationObjectSupport对象,并将该类交给spring管理⾃然可以获取spring对象
⽽获取application对象可以继承WebApplicationObjectSupport,获取
具体代码: <task :annotation-driven /> 或者设定线程池⼤⼩ <task :scheduler id="excutor" pool-size="3"/>
1
2
3
定时任务实现:/** * @author ll *该类⽤于保存WebApplicationContext */@Component public class WebContext extends WebApplicationObjectSupport { public WebApplicationContext getWebApp (){ return this .getWebApplicationContext(); }}
2tourism in china
3
4
5
6
7
8
9
10
11
12
注意:定时任务不要简单的使⽤注解实现,我们⼤部分的需求实现是将定时执⾏频率写在配置⽂件中,然后动态配置
cron表达式可以⾃⾏百度/** * @author ll *定时操作类 */@Lazy (fal )@Component @EnableScheduling public class EcrTimerTask extends ApplicationObjectSupport implements SchedulingConfigurer{ private static String refrsh_cron; static { PropertiesUtils.init("config/d
eploy.properties"); refrsh_Value(Constants.TIMER_REFRESH__CONTRACT).toString(); } public void refreshListCon (){ ApplicationContext springApp = this .getApplicationContext(); WebApplicationContext webApp = Bean(WebContext.class).getWebApp(); SingedLogic singedLogic= Bean(SingedLogic.class); List<ConstractListVo> vos = singedLogic.queryActualContract(); //放置到application 域⾥ ServletContext().tAttribute(Constants.CONTRACT_LIST_KEY,vos); } @Override public void configureTasks (ScheduledTaskRegistrar register) { /** * 定时刷新实时动态数据 */ register.addTriggerTask(new Runnable() { @Override public void run () { refreshListCon(); } }, new Trigger() { @Override public Date nextExecutionTime (TriggerContext triggerContext) { CronTrigger trigger=new CronTrigger(refrsh_cron); Date ExecutionTime(triggerContext); System.out.println("执⾏了刷新缓存"); return nextExec; } }); }}
alpha是什么2
3
4
5
6
7
8
9
10
11
12
13
14
15
中考自主招生
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
友谊地久天长英文版33
34
35
36
37frenemies
38
39
40
nake是什么意思41
42
43
44
45
46
47
48
49
50
fsl
51
52
53TIMER_REFRESH=0/5 * * * * ?
strawberry什么意思
1