2019-08-21 20:28
可能是 setnx 是 redis 后来加的,所以没有添加上
没有加的 API,可以通过 Redis.use().getJedis().setnx(...) 这种方式来支持,建议写一个工具类来支持,例如工具类取名叫:
RedisKit.java
将一些没有加的方法添加进去,注意,加的时候别忘了要在 finally 块中关闭 jedis.close(), 以释放资源,具体的 close 代码可以参考 jfinal 的 redis 相关代码
还有一个办法是直接修改 jfinal 源码加进去,再将 jfinal 打包成自己的版本使用。
最好的办法是将 jfinal 的 redis 插件代码单拿出来,自己改掉它,当成一个小工具包使用,这个办法可以不用改 jfinal 源码,有利于将来升级 jfinal
2019-08-21 16:32
@Inject 注入并不是所有地方都可以使用,例如你自己写的工具类中就无法获取,需要使用:
Aop.get(...) 获取
@Inject 可以使用的地方如下:
1:Controller 中
2:Interceptor 中
3:Validator 中
4:以上三个组件注入的组件的子组件,例如:
MyController 中使用 @Inject Aaa 注入了 Aaa 对象, Aaa 中又使用了 @Inject Bbb 注入了 Bbb 对象,这样可以一直无限注入下去
简单说,只要是从上述三个组件开始注入的,就可以一直不停地注入下去
但是,假定你有一个 MyKit , 该类的实例化对象如果是在上述三个组件中注入的是可以的,否则需要使用 Aop.get(...)
上述机制的原因如下:
使用 @Inject 注入需要 jfinal 接管对象的创建,而 Controller、Interceptor、Validator 组件的创建本身就是 jfinal 接管的,所以在这三类组件中可以使用 @Inject
文档中已经说得很详细:
https://www.jfinal.com/doc/4-5
注意看红色字体强调的部分
2019-08-20 17:27
@MrChu 你安装的貌似是 JRE,或者 eclipse 配置的是 JRE,所以 Edit library 的那个对话框选择第一项 Execution Environment 选好用的小扩号中显示的是 jre-1.8.0_171
在我这里小括号中显示的是 JavaSE-1.8
2019-08-20 11:12
@nbjgl 也并不是必须用 JFinal 的 API 才行,只要序列化与反序列化用的是同一个规则即可
jfinal redis 插件默认用的 fst 这个第三方进行的序列化与反序列化,所以,你在 spring boot 等其它场景需要与 jfinal 互相使用同一个 reids 中的数据时,也只要使用这个 fst 就可以了
你还可以通过 RedisPlugin.setSerializer(...) 来重新制定自己的序列化、反序列化规则,同样地,只要将不同地方的这个规则统一,就可以互通了