2018-12-05 22:27

由于 undertow 是为嵌入式 server 而生,所以 jfinal undertow 项目是不需要 web.xml 这个文件的

线上这版 Filter、Servelt、Listener、WebSocket 最新的配置方式如下:
UndertowServer.create(AppConfig.class)
.configWeb( builder -> {
// 配置 Filter
builder.addFilter("myFilter", "com.abc.MyFilter");
builder.addFilterUrlMapping("myFilter", "/*");
builder.addFilterInitParam("myFilter", "key", "value");

// 配置 Servlet
builder.addServlet("myServlet", "com.abc.MyServlet");
builder.addServletMapping("myServlet", "*.do");
builder.addServletInitParam("myServlet", "key", "value");

// 配置 Listener
builder.addListener("com.abc.MyListener");

// 配置 WebSocket,MyWebSocket 需使用 ServerEndpoint 注解
builder.addWebSocketEndpoint("com.abc.MyWebSocket");
})
.start();

这个配置方法在源码的 UndertowServer.configWeb(...) 上有。注意,上面的配置版本还未发布到中心库,现在的老版本是通过
UndertowServer.addFilterInfo(...) 来添加的 Filter

建议通过下面的方法直接用上新版本:
git clone git@gitee.com:jfinal/jfinal-undertow.git
cd jfinal-undertow
mvn clean install
注意要先将 pom.xml 中的 skip 标签改成 true 才能安装

最后改一下版本号为 : 1.2-SNAPSHOT 即可用上最新版本

2018-12-04 22:51

功能完善,作者很用心,赞一个

2018-12-04 21:53

jfinal 1.2 这几天正在最后打磨,功能更全面, 代码量更少, 配置更方便,有关 web 组件的配置统一在 configWeb 中来做了,注意升级时 addWebSocketEndpoint 稍改一下:
UndertowServer.create(...).configWeb( builder -》 {
builder.addWebSocketEndpoint(...);
}).start();

方法名都没变,配置的方式稍微变了一下

2018-12-04 16:58

终极方法:单步调试

2018-12-04 16:17

@疯狂的我 qq 里搜索群 jfinal ,有十来个官方群

2018-12-04 16:05

@wesleyxw druid 官方设置的默认值是 0 ,其实你还可以将这个值设置为 0,反正不影响 maxActive, 尽可能加快启动速度

2018-12-04 15:56

@疯狂的我 在首页下载 jfinal demo,里面有个 doc 目录,里面头详细的方法,最近推出一新功能

2018-12-04 12:05

既然有这么多数据库要建立连接,并且用的是 DruidPlugin,那么将其 initialSize 设置为 1 即可

调用这个方法进行设置, DruidPlugin.setInitialSize(1) , 注意是每个 DruidPlugin 对象都要调用一次

setInitialSize 这个参数仅仅是初始化的连接数目,默认是 10,而你有几十个数据库,那么启动的时候默认就是几百个连接, 要知道数据库建立连接是很耗时间的

setInitialSize 这个不影响后续的性能,因为 maxActive 没动过

2018-12-04 10:14

cron 表达式先写好第一次执行的时间,任务内部用一个 boolean flag 变量,每次执行前判断变量是否为 true

为 false 则执行并将 flag 置为 true,否则不执行。

还可以调用 Cron4jPlugin 中的 stop 方法停掉该调度

2018-12-03 18:43

@Aizen 模板中要实现继承的功能并不难,但引来的学习成本以及复杂度是用户无法承受的

模板本质是在大量模式化的内容中输出点动态内容,不适宜搞得过于复杂,因为复杂场景是留给后端的

2018-12-03 18:08

@messi_zhm 做一个 MyRender 继承一下你现在用到的 render , 例如 JsonRender
public class MyRender extends JsonRener ,添加 render() 方法,照抄 JsonRender 中的 render 代码,然后去掉 close() 那行代码

最后,用 RenderFactory 切换到自己的实现上去:
public class MyRenderFactory extends RenderFactory {
public Render getJsonRender(...) {
// 关键是这里
return new MyJsonRender(...);
}
}

最后配置一下:
me.setRenderFactoru(new MyRenderFactory());

上面三步,可以将 renderJson 的行为切换到自己 的 MyRender 上去,从而实现去掉 close() 的目的

最后,建议升级到最新版本


还有一个简单的办法是引入一个 BaseController,在其中覆盖 renderJson(...) 方法,变成
public void renderJson(...) {
render(new MyJsonRender(...));
}

然后你所有 contrller 继承自这个 BaseController 即可切换

2018-12-03 17:37

@messi_zhm 用最新版本的 jfinal 3.5 就好,这个版本 jfinal 在 render 中不再 close() 连接,只 flush() 一下

2018-12-03 17:35

@没牙的小朋友 最后给你一个方案:
1:将 webapp 目录整体挪到 src/main/resources 目录之下

2: configEngine 中配置
engine.setBaseTemplatePath("webapp");
engine.setToClassPathSourceFactory());

3:打包描述文件 package.xml 中的复制 src/main/webapp 目录资源到 jar 包中的配置由 "${basedir}/src/main/webapp" 改成 "${basedir}/src/main/resources/webapp"

由于 src/main/resources 属于 class path 的范畴,而这个路径是很稳固的,所以将所有 web 资源放在这里很方便使用,部署环境也很方便