java 初始化两遍,spring context初始化两次,以及bean两次创建,以及其造成dubbo端口占用且两次注册,以及其他重复创建对象等问题...

当项目被部署到tomcat的webapps目录下时,会出现spring context初始化两次,以及bean两次创建,以及其造成dubbo端口占用且两次注册,以及其他重复创建对象等问题。

具体表现:

1.Spring打印2次初始化日志

/*Spring 打印2次初始化日志

Initializing Spring root WebApplicationContext

......

Initializing Spring root WebApplicationContext

*/

2.数据库会多一倍的连接

--查询数据库连接

--oracle

select sess.sid,sess.serial#,sess.machine,

lo.oracle_username,lo.os_user_name,

ao.object_name,lo.locked_mode from v$locked_object lo,

dba_objects ao,v$session sess

where ao.object_id = lo.object_id and lo.session_id = sess.sid;

--mysql

select host, count(host) from information_schema.processlist;

--mysql也可以直接status查看状态

status

3.使用Dubbo时,会出现出现启动异常(即dubbo 注册了两次 ),端口被占用

/* 项目启动异常绑定某个IP:PORT失败,该端口已经被占用

Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to bind NettyServer on /10.0.15.163:20892, cause: Failed to bind to: /0.0.0.0:20892

......

Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /0.0.0.0:20892

......

Caused by: java.net.BindException: Address already in use: bind

......

*/

4.定时任务,或某个明确要求单例的对象,却出现了2个对象,单例bean打印了2次创建日志

/*某个单例对象,打印了2次对象创建日志

[localhost-startStop-1] DEBUG 单例对象XXX创建成功!

[localhost-startStop-1] DEBUG Creating instance of bean 'beanName'

[localhost-startStop-1] DEBUG Creating shared instance of singleton bean 'beanName2'

.........

[localhost-startStop-1] DEBUG 单例对象XXX创建成功!

[localhost-startStop-1] DEBUG Creating instance of bean 'beanName'

[localhost-startStop-1] DEBUG Creating shared instance of singleton bean 'beanName2'

*/

解决办法:

1.修改项目所在tomcat所使用的server.xml中appBase="webapps"的Host节点的autoDeploy属性和deployOnStartup属性为false

2.将项目发布到tomcat\webapps\ROOT目录下

3.修改项目的Deploy Path为除了tomcat\webapps以外的其他文件夹,如tomcat\myapp

3. 使用nginx指向tomcat

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值