2018-07-29 15:46
@童年 使用自定义的 render(new MyRender()); 来渲染你的业务(最后一行代码) http://www.jfinal.com/doc/3-10
2018-07-28 14:22
写个Interceptor http://www.jfinal.com/doc/4-2
在里面写个 列队 比如:
private static Queue cs= new ConcurrentLinkedQueue();
intercept方法里面做添加动作
public void intercept(Invocation inv) {
if(cs.size() < 20)
cs.offer(inv);
else
inv.getController().renderText("座位满了, 下次再来吧~");
}
再启动其他线程去处理就可以了
static {
for (int i = 0; i < 20; i++) {
new Thread(){
public void run() {
try {
Invocation inv = cs.poll();
if(inv==null)
Thread.sleep(200);
else
inv.invoke();
} catch (Exception e) {//异常}
}
}.start();
}
}
但这样做体验肯定不好卡的很, 应该把列队放业务层, 然后Controller快速反应, 告诉前端稍候再来拿结果
2018-07-27 15:23
Controller {
//线程池
private static ExecutorService exec = new ThreadPoolExecutor(1
, 300
, 0L
, TimeUnit.MILLISECONDS
, new LinkedBlockingQueue(1024)
, new ThreadFactory(){ @Override public Thread newThread(Runnable r) { return new Thread(r); }}
, new ThreadPoolExecutor.AbortPolicy());
//开始使用
public void index(){
exec .submit(new Runnable() {
@Override
public void run() {
//调用你的 业务代码
}
})
renderJson(true);
}
}
2018-07-21 10:46
@不会飞的张小Q 正常接收就好了啊, 比如 Controller提供的getPara系列方法http://www.jfinal.com/doc/3-3
2018-07-19 14:29
@l745230 我们的SQL都是先在 Navicat 里面敲好了(自带语法提示), 运行成功之后, 再复制粘贴到JAVA里面或者SQL模版里, 用起来也还行.... 我以前用过 海哥写的 Afinal 里面封装操作数据库的工具还是蛮好的
2018-07-14 20:04
@童年 你 UserService 里面是怎么写的了 ?
getTests 里面是什么业务?
dao对象是静态全局共享的, 如果被用来set(…)再get(...) , 在多线程请求下操作数据就会错乱的, 这个是JAVA最基础的概念, 以前总被新手误用, 所以对 dao对象 new User().dao() 做了判断提醒.
new 出来的对象, 就不一样了, 不会被多个线程操作了, 自然不会出错了