2018-07-31 16:40

试试: http://www.jfinal.com/project/4

2018-07-31 16:39

https://my.oschina.net/jfinal/blog/353062
是项目配置弄错了吧

2018-07-31 16:38

早就支持了: http://www.jfinal.com/doc/5-13

2018-07-30 21:04

Cron4jPlugin是作为JFinal的Plugin而存在的, 所以可以在代码中直接把Cron4jPlugin存起来, 然后调用 start 和 stop, 修改配置文件后 建个Controller对它进行stop再start 就可以了.

或者直接使用cront4j, 把规则存在数据库, 直接操作 http://www.jfinal.com/share/757

2018-07-29 15:46

@童年 使用自定义的 render(new MyRender()); 来渲染你的业务(最后一行代码) http://www.jfinal.com/doc/3-10

.


复制com.jfinal.render.FileRender类的代码,
根据你的业务做下修改就可以用了
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/render/FileRender.java

2018-07-29 15:31

@迟到的微笑 exec 是static 的, 所以, 其他方法直接用这个成员变量就可以了

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 22:48

@Krsguan 试试http://www.jfinal.com/share/1024

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-25 21:31

public class CrossDomainInterceptor implements Interceptor {

@Override
public void intercept(Invocation inv) {
inv.getController().getResponse().addHeader("Access-Control-Allow-Origin", "*");

inv.invoke();
}
}
哪里需要跨域哪里就用@Before(CrossDomainInterceptor.class)

2018-07-25 17:46

Db.user(db2).find 得到的 Record r,
直接 r.set("新增字段","xxxx");
再Db.user(abc).save("表名", r);
就可以了~

2018-07-21 16:54

先搞清楚什么东西在后端运行, 什么东西在前端运行, 先区分开来, 不然会晕.

模版中它是 "替换"充填 的形式 , 不是脚本等 "拼接" 的概念, 这个也要搞清楚

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 出来的对象, 就不一样了, 不会被多个线程操作了, 自然不会出错了