2017-07-27 11:15

刚刚注意到你的的程序是在 Job 中来使用 redis ,那么你的这个 Job 始终是在一个线程之中,注意看一下 com.jfinal.plugin.redis.Cache.java 源码中的 close(Jedis jedis) 方法,这个方法如果从 ThreadLocal 中获取不到连接时才去真的关闭连接,以此来实现 redis 的事务功能

所以,如果你使用的是 RedisInterceptor 或者调用 Redis.call(...) 方法,那么 Cache 的 ThreadLocal 中会有值,而 Job 是一直运行着的线程,所以会造成连接无法被关闭,多加两行代码,在 finally 块中关闭一下连接,例如:
try {
cache.get(...);
} finally {
cache.removeThreadLocalJedis();
}

注意前面有几个关键点:
1:你的程序直接或者间接的向 Cache 的 ThreadLocal 属性中放入了连接
2:使用 cache 的代码一直在一个线程之中不结束,例如 job 这样的

2017-07-27 10:58

这样用着就挺好,Redis.use() 方法并不会动用连接,只有实际去操作 redis 的时候才需要从连接池拿连接,而 redis.get(...) redis.set(...) 这所有的方法都在 finally 块中关闭过连接的,不会造成连接泄漏的情况

你的程序连接撑爆了,注意下面几点:
1:redis 服务端允许的最大连接数是否达到,例如,很多客户端同时连,而这些客户端初始化连接池时会首先创建很多连接到池里面

2:客户端配置的最大连接数是不是过小,造成并发稍多时就耗尽

3:自己的程序中是否自行通过 getJedis() 获取过连接,但是却没有在 finally 块中关闭连接,造成连接资源泄漏

2017-07-27 10:52

使用 Model.put(Record) 方法能将 Record 转成Model

2017-07-27 10:50

@Terry丶 俱乐部是增值服务,是为了积累一定的资源用于社区的基础开销与费用。没加入俱乐部的也几乎可以得到所有社区资源,例如文档、源代码等等

2017-07-26 18:37

只能单步调试去领悟

2017-07-26 17:23

在我们这里都是可以的,从你的代码看不出啥问题

2017-07-26 15:46

maven 现在是标配,需要花一点点时间去学习,常用的命令就四五个而已

如果还不熟悉 maven,可以在首页下载一个 jfinal-all-3.1.zip 的文件,里头有一个所有 jar 包使用说明,以及所有需要的 jar 包,根据那个文档去使用却可

强烈建议要学会 maven 使用,然后在 pom.xml 中添加点东西就可以搞定 jar 包的问题

2017-07-26 14:48

@宅小达 注意一下是不是用的 jfinal weixin 1.9 版本,最新的文档是针对 1.9 版本的

2017-07-26 14:47

@Terry丶 官方群可以加入,加入只需要搜索一下 jfinal qq 群,里面带有“官方” 二字的几乎都是官方群,有十来个

2017-07-26 14:46

dao.find(...) 方法会去获取 Connection 对象,如果获取到的对象所在的 DataSource 已经被 close() 掉了,那么这个 Connection 对象变得不可用

这个问题要仔细检查一下代码,不看代码是解决不了的

2017-07-26 11:56

@devil2k 加 hasInitedFlag 这个变量控制,治标不治本,其它的对象仍然被初始化两次,将来如果你有任务调度的类被创建两次,那么这些任务会被执行两次,可能造成很大损失

2017-07-26 11:52

提问中的异常信息请勿截图,对搜索引擎不友好,无法形成积累

2017-07-26 11:52

去服务器上看一下现场,看到底文件在不在,尤其注意一下路径与文件名的大小写问题

大小写有问题在 windows 下面可以成功运行,但在 linux 下面却找不到

2017-07-26 11:23

@devil2k 好多年不用 spring,这个 init 被运行两次的问题只能交给你了

2017-07-26 11:21

@linuxea tomcat 有这种坑:https://my.oschina.net/jfinal/blog/353062
一个项目被启动两次