2019-08-22 16:42
@思维炮弹 那只剩最后一招了,单步调试下 AopFactory 这个类,看看里面哪一步没有获到到注入类
我估计应该是是映射问题,例如映射错了之类的
2019-08-22 16:41
@新手的呐喊 如果 jar 包内没有 log4j.properties 文件,而是放在 config 目录下面的话,应该是可以被加载的,除非 log4j 加载配置用了不一样的 ClassLoader
你在前面谈到用的是 log4j的classloader是 sun.misc.Launcher.AppClassLoader,正常情况下是不应该的
或许是 log4j 自己有代码去拿了这个 parent class loader
jfinal 为其它配置文件的加载做过测试,是可以从 config 目录下去拿的, log4j.properties 文件没有做过这个测试
2019-08-22 16:13
@新手的呐喊 其实 jfinal 的默认打包方式已经足够方便了,文件并不多,所有的 class 文件也打成了 jar 包
fatjar 还是建议啥配置都不用改的情况下使用。 为此,jfinal-undertow 还提供了命令行传参的方式来启动,注意看下面代码的第 188 行:
https://gitee.com/jfinal/jfinal-undertow/blob/jfinal-undertow-1.9/src/main/java/com/jfinal/server/undertow/UndertowServer.java
命令行可以这样用:
java -Dundertow.port=8080 -Dundertow.host=0.0.0.0 -jar my-project.jar
另外还有三个参数也可以这样来传递,也就是说,fatjar 的用法已经将常用的参数可以在配置文件之外优先传递了
这些努力都是为了让你在使用 fatjar 时不必再改配置文件,更不必去添加 config 目录
2019-08-22 16:06
@思维炮弹 只要是从 Controller、Interceptor、Validator 这三个组件开始 @Inject 注入的,沿路下来,一直都可以 @Inject
我估计你没成功是别的原因,你是不是在 Controller 的父类中注入了,这个要配置:
me.setInjectSuperClass(true)
最后,注入功能默认是不开启的,需要你配置一下:
me.setInjectDependency(true);
2019-08-21 20:58
@weiyie jfinal 4.4 对格式严格性这唯一的例外进行了改进,这回完美了,建议升级到 4.4,新版本已推送到了 maven 中心库,极度好用
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