写在前面

最近做了两个Java Web项目【微信公众号开发】,一个设计时间花了大半,编码没用很久,其他的都用在测试上了;另外一个设计(设计也总在改,?‍),大部分时间都花在测试上了。 碰到了不少的坑,这里就自己记录的服务器相关的写下来,方便查看吧。

问题一、tomcat端口占用

方法一:

netstat -nltp | grep 8005
Netstat -nltp | grep 8080
杀掉占用端口的进程

方法二:

$JAVA_HOME/jre/lib/security/Java.security 文件中 securerandom.source 配置项
securerandom.source=file:/dev/random
改为:
securerandom.source=file:/dev/urandom

Linux服务器中查看java的安装路径

问题二.tomcat服务器假死(崩溃)

症状:访问网站时,所有静态资源可以访问,凡是需要从数据库获取的数据全部无法加载出来。

具体情况:点击页面欲加载数据,页面没有反应,依然只有静态资源显示,但服务器日志没有报错

原因:

openSession创建session时autoCloseSessionEnabled参数为false,即在事物结束后不会自动关闭session,需要手动关闭,如果不关闭将导致session关联的数据库连接无法释放,最后资源耗尽而使程序宕掉。    
getCurrentSession创建session时autoCloseSessionEnabled,flushBeforeCompletionEnabled都为true,并且session会同sessionFactory组成一个map以sessionFactory为主键绑定到当前线程。
getCurrentSession():从上下文(配置文件current_session_context_class: thread 使用Connection自动管理;jta(java transaction api) 由Application Server提供的分布式事务管理,Tomcat本身不具备此能力,JBoss、WebLogic具备)找,如果有,则用旧的,否则创建新的,事务提交自动Close;

总之, getCurrentSession () 使用当前的session
openSession() 重新建立一个新的session
而后端代码DAO层使用了getSessionFactory().openSession(),这种写法每次都会建立一个新的连接,但是需要手动关闭close(),没有关闭最后导致资源耗尽而宕机;而getSessionFactory().getCurrentSession()会在上下文中找到一个连接,如果没有则新建,并且用完后会自动关闭。

解决方法:将openSession()改成getCurrentSession()

建议:在一个应用程序中,如果DAO 层使用Spring 的hibernate 模板,通过Spring 来控制session 的生命周期,则首选getCurrentSession ()。

问题三:

重启防火墙后的重定向就失效了!!!

404页面如下:

【服务器相关】项目部署后问题汇总_服务器相关

原因:

未开启防火墙端口;

查看网上的资料是防火墙把端口拦截了,然而并不是。。 弄了半天,就是tomcat卡死然后杀掉进程,重启tomcat就可以了。。

思考:为什么重定向失效出现上面的404页面?

这可能又是一个坑。