2020-03-24 15:04

@liugz 使用新版本的脚本,下载首页的 jfinal_demo_for_maven.zip ,从里面拿到最新版本

2020-03-24 15:03

请求 /evox/about 这类 url 不存在,仅此而已

2020-03-24 15:02

文档中有很明确的说明,参考一下:
https://jfinal.com/doc/1-11

2020-03-24 11:53

@himans 用 #number 指令,不要用输出指令

2020-03-23 21:34

@杜福忠 connection 资源耗尽后的 getConnection() 会等待,达到最长等待时间会抛异常,最长等待时间之内获取到 connection 后流程继续

不同的连接池实现可能有所不同,druid 中有一个 maxWait 配置最长等待时间,其它连接池不一定有这个

2020-03-23 18:22

@goodJfinal 区分数据源建议在更高层去区分,而不要在 sql 层面,更不要在 sql 模板层面,太不优雅

用拦截器就是一个很好的切换数据源的办法,在拦截器中只需要根据当前请求账号来切换就可以了,切换的具体代码大至如下:
Account account = getLoginAccount();

String ds = account.getDataSourceName();
Config config = DbKit.getConfig(ds);

// 将 Connection 对象绑定到 ThreadLocal,也就是绑定到当前线程
Connection conn = config.getDataSource().getConnection();
config.setThreadLocalConnection( conn );

try {
inv.invoke();
}
finally {
conn.close();
}


核心在于对当前线程绑定 connection 对象,绑定后,后续的数据库操作都会依赖于这个 connection,而这个 connection 的 DataSource 对象又是与当前登录账号相关联的

2020-03-23 16:32

上面的具体用法,参考 com.jfinal.template.ext.directive 包下面的 StringDirective.java

该指定是 #string() ... #end 指令,其中的 exec 方法就用了新的变量接管了输出,并没有向原本的 writer 中输出

2020-03-23 16:31

看不出来是哪关闭输出流了

建议像尝试下面的代码:
StringWriter sw = new StringWriter();
String content = template.render(scope.getData(), fsw).toString();

还可以进一步改进:
其实 Template 没必要 new 出来,而是只需要替换输出参数就可以了,例如:
CharWriter charWriter = new CharWriter(64);
FastStringWriter fsw = new FastStringWriter();
charWriter.init(fsw);
try {
stat.exec(env, scope, charWriter);
String content = fsw.toString();
} finally {
charWriter.close();
}

上面的代码,使用你自己 new 出来的 CharWriter 来接管 stat 执行时的输出

2020-03-23 16:08

@去冰正常甜 如果你要做得更严格点,可以在 Db.update(...) 执行建表语句以后,再使用 Db.find(...) 来验证:
try {
Db.update( 建表 sql );
Db.find("select * from " + tableName + " limit 1");
}
catch(Exception e) {
建表失败
}

Db.find 去尝试刚刚建的表是否存在,如果不存在则肯定报 table 不存在的异常出来

将上面的代码封装在一个工具类中更好

2020-03-23 16:05

@去冰正常甜 对于建表语句, Db.update(...) 的返回值是不可靠的,不要依赖于这个值

2020-03-23 15:37

@小白菜111 jfinal weixin 2.5 发布到中心库,但未发新闻,也未发 changelog

一般小版本都不发这些

2020-03-23 15:33

@去冰正常甜 建表语句,如果不抛出异常,你可以认为是成功了

而且建表语句是不能使用事务功能的,也就是说建表用的 sql 与其它数据库操作无法在同一个事务中回滚,这个是数据库的决定的

2020-03-23 15:32

@jounzhang 放入外部用 #include 是个很好的办法,同时也有利于分开管理

2020-03-23 14:46

idea 的格式化功能能否针对 enjoy 的指令进行配置?