使用 Servlet 的命中计数器方法
Hit counter approach with Servlets
我想使用 Java Servlet 在我的数据库中创建一个命中计数器寄存器。主要思想是使用过滤器,并在每次用户访问时增加计数器。
我不想在每次访问时都在数据库中进行更新(我发现这效率不高)。我更喜欢使用每次访问都会增加的静态变量,并且在一天结束时,使用该变量的值将 INSERT 插入数据库并将其重置为零。
我该怎么做?我不知道如何安排每个午夜对我的应用程序说的 accion 进行 INSERT 并重置变量...
有什么想法吗?
谢谢! :)
您可以使用 java.util.Timer
Timer t = new Timer("myTimer");
t.schedule(new TimerTask() {
@Override
public void run() {
if (count != lastCount) {
count = lastCount;
// TODO: update into database
}
}
}, 0, 2000);
在寻找解决方案很长时间后,我发现 Timer 不能很好地与 Servlet 一起工作,所以我使用了它(而且效果很好!:)这是过滤器的代码:
public class LogVisitorsListener implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent sce) {
scheduler = Executors.newSingleThreadScheduledExecutor();
// It will be executed every 1 hour
scheduler.scheduleAtFixedRate(new DailyHitsRunnable(), 0, 1, TimeUnit.HOURS);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
scheduler.shutdownNow();
}
}
还有我的 class DailyHitsRunnable:
public class DailyHitsRunnable implements Runnable {
@Override
public void run() {
try {
// stuff here...
}
catch(Throwable t) {
// catch work here...
}
}
}
使用它非常重要 try/catch 以避免在出现故障时停止可运行的操作。
此致!
我想使用 Java Servlet 在我的数据库中创建一个命中计数器寄存器。主要思想是使用过滤器,并在每次用户访问时增加计数器。
我不想在每次访问时都在数据库中进行更新(我发现这效率不高)。我更喜欢使用每次访问都会增加的静态变量,并且在一天结束时,使用该变量的值将 INSERT 插入数据库并将其重置为零。
我该怎么做?我不知道如何安排每个午夜对我的应用程序说的 accion 进行 INSERT 并重置变量...
有什么想法吗?
谢谢! :)
您可以使用 java.util.Timer
Timer t = new Timer("myTimer");
t.schedule(new TimerTask() {
@Override
public void run() {
if (count != lastCount) {
count = lastCount;
// TODO: update into database
}
}
}, 0, 2000);
在寻找解决方案很长时间后,我发现 Timer 不能很好地与 Servlet 一起工作,所以我使用了它(而且效果很好!:)这是过滤器的代码:
public class LogVisitorsListener implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent sce) {
scheduler = Executors.newSingleThreadScheduledExecutor();
// It will be executed every 1 hour
scheduler.scheduleAtFixedRate(new DailyHitsRunnable(), 0, 1, TimeUnit.HOURS);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
scheduler.shutdownNow();
}
}
还有我的 class DailyHitsRunnable:
public class DailyHitsRunnable implements Runnable {
@Override
public void run() {
try {
// stuff here...
}
catch(Throwable t) {
// catch work here...
}
}
}
使用它非常重要 try/catch 以避免在出现故障时停止可运行的操作。
此致!