文档章节

Spring Boot 在localhost域奇怪的404问题(Mac book pro)

polly
 polly
发布于 2017/08/31 16:31
字数 600
阅读 154
收藏 3
点赞 0
评论 4

在mac系统中,明明url是对的,浏览器也可以打开,一个简单的代码调用就是404,你有没有遇到过?

情景再现

普通的一个controller,返回一个常量。

@GetMapping("/project_metadata/spring-boot")
public String getMetadata(){
  return "{\"data\":1234}";//这个不重要
}

调用接口的方式:

content = new JSONObject(restTemplate.getForObject(url, String.class));

大部分情况下,返回如下错误,偶尔成功。

2017-08-31 14:35:38.867  INFO 3450 --- [nio-8080-exec-1] .i.w.s.DefaultInitializrMetadataProvider : Fetching boot metadata from http://localhost:8080/project_metadata/spring-boot
2017-08-31 14:35:38.872  WARN 3450 --- [nio-8080-exec-1] .i.w.s.DefaultInitializrMetadataProvider : Failed to fetch spring boot metadata

org.springframework.web.client.HttpClientErrorException: 404 Not Found
	at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:63) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
	at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
	at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
	at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]
	at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:287) ~[spring-web-4.3.10.RELEASE.jar:4.3.10.RELEASE]

排查

浏览器访问是正常的。

把localhost 改为一个私网IP,页面空白,不报错。

到 bash中查看:

curl -I http://10.2.10.203:8080/project_metadata/spring-boot
HTTP/1.1 404 Not Found
server: ecstatic-1.4.1
Date: Thu, 31 Aug 2017 07:06:39 GMT
Connection: keep-alive

什么情况?

再次检查localhost:

curl -I http://localhost:8080/project_metadata/spring-boot
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Content-Length: 2683
Date: Thu, 31 Aug 2017 07:07:28 GMT

查看端口:

lsof -i:8080
COMMAND  PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node    1045 pollyduan   13u  IPv4 0x992085ef857b1d07      0t0  TCP *:http-alt (LISTEN)
java    3995 pollyduan   65u  IPv6 0x992085ef905d994f      0t0  TCP *:http-alt (LISTEN)

什么鬼?

杀掉node,恢复清明了。

坑在哪里?

有两个进程都在监听8080,但ip错乱。

Mac osx 一手造成了坑。ubuntu 测试无坑,启动http-server的情况下,tomcat根本起不来:

Caused by: java.net.BindException: Address already in use
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:433)
	at sun.nio.ch.Net.bind(Net.java:425)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
	at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:340)
	at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:742)
	at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:458)
	at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:120)
	at org.apache.catalina.connector.Connector.initInternal(Connector.java:960)
	... 13 more

小结:

完整的坑是这样的,我用node起了一个127.0.0.1:8080 调js,完了没关。

现在用springboot起8080,竟然成功,但这个坑就这么挖好了。

有两个进程都使用的8080,spring boot 是localhost:8080 ,他会精神错乱。因为localhost也是127.0.0.1。

奇了怪的是,既然错乱,启动的时候居然不报端口占用。

那么我们现在要明确,localhost指向127.0.0.1,但二者还是不一样,localhost可以看做一个域名。

为了避免入坑,如果可能尽量不使用localhost,直接使用IP。

Tomcat 启动同样的问题。

浏览器一切正常,restTemplate错乱。

© 著作权归作者所有

共有 人打赏支持
polly
粉丝 145
博文 56
码字总数 68534
作品 0
海淀
高级程序员
加载中

评论(4)

polly
polly

引用来自“文涛_常”的评论

应该是ipv4 v6的问题

@文涛_常 是,不过只在mac遇到了,别的系统没事,算是个坑吧
文涛_常
文涛_常
应该是ipv4 v6的问题
polly
polly

引用来自“Travellight”的评论

tcp端口复用
该问题仅在mac,linux测试不存在
T
Travellight
tcp端口复用
SpringBoot--Swagger2配置(解决404报错)

在 spring boot 项目中配置 Swagger2 突然出现了 404 报错, 究其原因,是因为 MVC 没有找到 swagger-ui 包中的 swagger-ui.html 文件; 以下就是 swagger2 的配置,及解决方案: 一, 引入Maven :...

ge洋 ⋅ 05/16 ⋅ 0

NewStarBlog 发布 1.0 版本,国产开源 Java 博客平台

NewStarBlog 是开源 Java 博客平台。 涉及技术 NewStarBlog 使用了 Spring Framework 5, Spring Boot 2, Thymeleaf, Elasticsearch, Spring Data 等技术。 JDK 8 Gradle 4.5.1 Spring Boot 2......

waylau ⋅ 04/26 ⋅ 0

Spring Boot干货系列:(五)开发Web应用JSP篇

        前言   上一篇介绍了Spring Boot中使用Thymeleaf模板引擎,今天来介绍一下如何使用SpringBoot官方不推荐的jsp,虽然难度有点大,但是玩起来还是蛮有意思的。   正文   先...

后端编程嘟 ⋅ 2017/03/14 ⋅ 0

spring cloud config server 客户端权限验证配置401

用的spring boot 2.0 在周立的教程书上以及很多网上的资料,关于config 服务端的账号密码设置都是引入security依赖后配置 security: basic: enabled: true user: name: root password: root...

呆呆的萌新 ⋅ 06/12 ⋅ 0

Spring Boot使用Spring Data Redis操作Redis(单机/集群)

说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和Jedis客户端,可以减少版本这块的冲突,当然,如果要引入...

easonjim ⋅ 2017/11/08 ⋅ 0

waylau/new-star-blog

NewStarBlog NewStarBlog is an open source Java blog platform. NewStarBlog 是开源 Java 博客平台。 Technologies 涉及技术 NewStarBlog covers Spring Framework 5, Spring Boot 2, Thym......

waylau ⋅ 04/26 ⋅ 0

Spring Boot整合模板引擎jsp

jsp也算是一种模板引擎吧。整合jsp前,先说一下运行SpringBoot项目的几种方式 1. 运行SpringBoot项目的几种方式 1.1 使用内嵌Tomcat运行项目 在IDE中右键运行启动类,也就是直接直接运行App...

yysue ⋅ 06/15 ⋅ 0

spring-boot-admin 2.0小试牛刀

序 本文主要展示下spring-boot-admin 2.0版本的新特性 server实例 maven 配置 config client实例 maven 配置 这里配置admin server的地址 运行实例 wallboard wallboard 实例详情 applicatio...

go4it ⋅ 05/21 ⋅ 0

springMVC可以进入到控制器中,却无法返回页面错误

碰到一个奇怪的问题,页面加载,使用springMVC 可以进入到控制器 却无法返回视图。

sprouting ⋅ 2016/05/10 ⋅ 0

知识点-Spring Boot 异常处理汇总

在实际开发中,我们会遇到很多异常,在发生异常的时候Spring Boot默认提供了错误页面展示给用户。看似比较友好,其实页面很丑。 上面讲的是做页面开发的时候遇到的问题,还有一种情况就是用来...

尹吉欢 ⋅ 05/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 22分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 45分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 47分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 54分钟前 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 今天 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 今天 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部