Spring boot 中集成MongoDB遇到报错的问题

centos7防火墙导致spring boot访问mongodb是出现异常查看详情http://blog.csdn.net/hkh_1012/article/details/44899561

环境描述:

数据库:mongodb3.0.1

数据库系统:centos7,(虚拟机,最小安装)

数据库驱动:mongo-java-driver-3.0.0.jar

问题描述:shell环境下用mongo客户端程序能正常连接mongod,但java程序始终报错。

java代码很简单,如下:

[java] view plain copy

Mongo mg = new Mongo("192.168.59.128",27017);  

DB db = mg.getDB("mydb");  

for(String s:db.getCollectionNames()){  

            System.out.println(s);  

        }  

报错如下:

四月 05, 2015 8:26:27 下午 com.mongodb.diagnostics.logging.JULLogger log

信息: Cluster created with settings {hosts=[192.168.59.128:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=50}

四月 05, 2015 8:26:28 下午 com.mongodb.diagnostics.logging.JULLogger log

信息: No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=192.168.59.128:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out

四月 05, 2015 8:26:48 下午 com.mongodb.diagnostics.logging.JULLogger log

信息: Exception in monitor thread while connecting to server 192.168.59.128:27017

com.mongodb.MongoSocketOpenException: Exception opening socket

at com.mongodb.connection.SocketStream.open(SocketStream.java:63)

at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)

at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)

at java.lang.Thread.run(Unknown Source)

Caused by: java.net.SocketTimeoutException: connect timed out

at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)

at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)

at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)

at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)

at java.net.AbstractPlainSocketImpl.connect(Unknown Source)

at java.net.PlainSocketImpl.connect(Unknown Source)

at java.net.SocksSocketImpl.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)

at com.mongodb.connection.SocketStream.open(SocketStream.java:58)

... 3 more

Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=192.168.59.128:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.SocketTimeoutException: connect timed out}}]

at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:370)

at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)

at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.(ClusterBinding.java:75)

at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.(ClusterBinding.java:71)

at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)

at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:166)

at com.mongodb.operation.ListCollectionsOperation.execute(ListCollectionsOperation.java:172)

at com.mongodb.operation.ListCollectionsOperation.execute(ListCollectionsOperation.java:80)

at com.mongodb.Mongo.execute(Mongo.java:736)

at com.mongodb.Mongo$2.execute(Mongo.java:723)

at com.mongodb.OperationIterable.iterator(OperationIterable.java:47)

at com.mongodb.OperationIterable.forEach(OperationIterable.java:66)

at com.mongodb.MappingIterable.forEach(MappingIterable.java:50)

at com.mongodb.MappingIterable.into(MappingIterable.java:60)

at com.mongodb.DB.getCollectionNames(DB.java:223)

at mongodbtest.TestMongodbCurd.main(TestMongodbCurd.java:13)

报错信息中有“Exception opening socket”推测应该是java程序与服务器建立连接时报错,

执行命令ps -aux | grep mong,查看mongod进程,结果显示mongod运行正常。

root      2139  1.1  6.9 631964 70364 ?        Sl   16:15   0:48 mongod -f /usr/local/mongodb/mongodb-linux-x86_64-3.0.1/bin/mongodb.conf

执行命令netstat -ntlp ,查看数据库27017端口监听是否正常,结果正常

tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      2139/mongod

执行命令 cat /usr/local/mongodb/mongodb-linux-x86_64-3.0.1/bin/mongodb.conf,再次查看mongod的启动配置文件,结果如下,仍没有问题

dbpath = /usr/local/mongodb/data/db

logpath = /usr/local/mongodb/logs/mongodb.log

#bind_ip = 192.1168.59.128

port = 27017

fork = true

#nohttpinterface = true

至此,再结合shell下mongo客户端可以正常使用,基本可以推断不是mongodb数据库的问题,应该是系统安全设置的问题,首先想到的是防火墙。

查看centos7的官方文档,知道centos7最小安装默认只安装防火墙的动态配置规则服务(firewalld),静态配置规则服务(iptables与ip6tables)需要另行安装。

安装防火墙静态配置规则服务,并设置成可用状态

yum install iptables-services

systemctl mask firewalld.service

systemctl enable iptables.service

systemctl enable ip6tables.service

修改配置:vi /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT

停用动态规则服务,启用静态规则服务

systemctl stop firewalld.service

systemctl start iptables.service

systemctl start ip6tables.service

再次运行java程序,得到结果如下:

信息: Opened connection [connectionId{localValue:2, serverValue:3}] to 192.168.59.128:27017

inventory

person

personInfo

system.indexes

testData

与想要的结果一致。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343