2019-08-23 11:44

@jfinal初识 就是连接池, close() 这个动作是回收到连接池,而不是真的关掉

2019-08-22 21:10

生成数据库备注要配置一下:
generate.setGenerateRemarkers(true);

2019-08-22 17:43

外部有请求向你所在的机器发过来而已

如果你用的是云服务器,其 IP 地址可能是别人使用过的,而这个 IP 向第三方提供过服务的话,第三方的请求 IP 可能还没换过来

还有一种情况是恶意攻击者扫描可供攻击的入口

在百度上搜索你的提示信息 "/actuator/info" 可知,这个属于前者的可能性大,该 url 是 Spring Cloud 整合的 Eureka 项目向外提供的 url

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

@kehuadong 这个办法很赞,百度网盘下载速度太慢了

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:08

@happyboy 这个应该是数据源连接池的问题,连接池需要定期对池里的 Conection 对象进行一点操作,和服务端互动一下,否则服务端会在超过一定时间后主动断开连接

当服务端断开连接以后,你再发请求就需要一个建立连接的时间,比较耗时

数据库服务端主动断开连接是一种保护机制,主动回收资源

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:49

速度很快, 链接去掉 target="_blank" 体验会好些

2019-08-21 20:30

INFO 提示你连接关闭这个才正常,不关闭证明有资源泄漏

此外,提示信息是 INFO,这个是很恰当的输出,你需要将日志级别调整到 warn、error 之类的就不会输出这类信息

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:41

你开启了嵌套事务,很可能是外层你还用了 @Before(Tx.class)

在控制台看一下 jfinal action report 中输出的拦截器信息,找一找 Tx.class 是不是存在,用 @Clear(Tx.class) 删之

2019-08-21 16:38

这个问题并不是异常,而仅仅是个警告,并且提示信息告知要使用更短的 maxLifetime 值

而你设置的值太大了

这个可能还不是关键问题,或许是你自己有代码提前关闭了 Connection

搜索一下你的代码有没有这种 getConnection(), 如果是自行获取连接,建议: getDataSource().getConnection() , 这样更安全,因为前者你获取到的可能是一个 ThreadLocal 中的连接,如果你开启了事务,线程后续还需要使用该 ThreadLocal 就会有问题

不过这个可能性很小,因为这种情况大概率会报异常而不是警告