【发布时间】:2014-02-17 08:47:00
【问题描述】:
我需要为某些页面创建一个计数器。 所以我创建了一个名为 Counter 的域:
class Counter {
java.sql.Date date;
Member member;
int count;
int submit;
//setter and getter...
}
Count 是这个页面打开了多少次,submit 是提交了多少次表单(联系表单的种类)。
我创建了一个名为 CounterService 的服务:
class CounterService {
List counters;
def load() {
counters = Counter.findAllByDate(new java.sql.Date(System.currentTimeMillis()));
}
def increaseCount(Member member) {
counters.each {
if(it.member.id = member.id) it.setCount(it.count + 1);
}
}
//the rest of the code...
}
我将使用 Quartz 作业每小时将计数器保存到数据库中。
你认为这个计数器变量是多线程安全的吗?因为 CounterService 会在很多 Controller 中被调用。 我需要在服务器启动之前调用 load 并且我不知道在哪里调用它。 对我应该在哪里调用 load() 有什么建议吗? 或者,也许是页面计数器的更好解决方案?
【问题讨论】:
标签: grails hitcounter grails-services