陈科肇

============

最近碰到一个奇葩的问题:

前提 -- Linux 环境下;Oracle数据库已经搭建完成;Tomcat也搭建完成并部署了应用程序;

原因:

我在win7下在tomcat里部署了与Linux部署的是同一个应用程序,然后访问了Linux里的Oracle数据库,这个测试是成功了,应用程序能正常运行。

然而当我转到Linux环境下Tomcat部署应用程序时,应用程序的登录页面是可以正常访问的,因为这时还需要连接数据库,所以能正常运行。但一到了访问数据库时,就报错,我查看了Tomcat的log,发现如下:

Hibernate: 
    select
        systemid 
    from
        hidp_sys_is 
    where
        systemcode=? 
AbandonedObjectPool is used (org.apache.commons.dbcp.AbandonedObjectPool@5572a255)
   LogAbandoned: false
   RemoveAbandoned: true
   RemoveAbandonedTimeout: 600
2015-02-05 16:23:16  [ http-bio-8080-exec-9:18957 ] - [ ERROR ]  Cannot create PoolableConnectionFactory (The Network Adapter could not establish the connection)

我就纳闷,怎么就访问不了数据库了,之前在Windows时不就好好的吗,真是奇葩!

=================================================================

解决方案:

我想想一会,突然想起了,之前配置Oracle实例的时候,发现localhost在Linux下是没用的。

没错,问题就是卡在这。

然后就把你配置的“数据源”时写的localhost改为你本机的IP地址,即可正常访问数据库。

========

注:在上面所描述的问题,你可以使用IP地址进行设定,如果你想使用localhost设置定位本机IP,请往下看

这也就是关于,在Linux 下,怎么获取本地主机IP的问题了!

Linux修改localname:

首先使用命令查看localname的指南: #man localname,看完指南你就可以知道个大概意思了!

可以看到有一段文字的描述:

FILES

/etc/hosts  /etc/sysconfig/network

NOTE

note that hostname doesn't change anything permanently.after reboot original names from /etc/hosts are used again

这就是表示localname要配置的配置文件路径位置及/etc/hosts描述。

方法一:

使用#hostname修改临时的主机名,但操作系统重启之后,就恢复原样了!

# hostname,该命令是查看主机名;

# hostname -i,该命令是查看主机名对应的IP地址;

方法二:

永久修改主机名,修改配置文件

修改/etc/sysconfig/network,才能有效地修改主机名;

/etc/hosts,hostname命令读取这个配置文件;

直接修改/etc/hosts文件,系统本身用到主机名的地方不会变化,所以 /etc/hosts 是网络中用的,/etc/sysconfig/network是本机起作用
==============
好了,接下我们配置主机对应的IP地址吧。
打开配置文件 ,# gedit /etc/hosts,可以看到初始的文件是这样的:

上面大概可分为三个部分:网络IP地址 主机名 域名,每部分用空格隔开;(猜想-后面还有,估计是可以一个IP可以对应多个主机,到时实践一下)
嗯,我们就按照这个格式把# hostname查询出来的主机名对应上应有的网络IP地址吧。
注:在你主机未对应网络IP时,你执行# hostname -i,结果是显示“未知主机”的

再执行以下命令,看出结果了吧

===================
接下来,我们再测试下把WEB APP配置的“数据源”的IP地址改回localhost,看看是什么结果
额。。。问题没解决
待续...

Logo

更多推荐