SpringBoot配置应用自定义启动端口出现405问题

在配置SpringBoot项目自定义端口时候,在项目的主目录下src/main/resources/application.properties文件中配置如下:
server.port = 8090
配置完毕后重启项目,查看日志发现配置已经生效:
2017-06-06 23:19:40.459  INFO 61336 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8090 (http)
根目录映射也成功:
2017-06-06 23:19:39.374  INFO 61336 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String springboot.web.HelloWorldController.sayHello()
此时chrome键入localhost:8090,什么也看不到,于是乎打开chrome的console,发现如下诡异提示:
Failed to load resource: the server responded with a status of 405 (Method Not Allowed) localhost:8090/
看到后的第一反应是:以为自己手贱关闭了GET访问,于是便去查看是否关闭了GET访问,代码如下:
package springboot.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* Created by strongant on 2017/6/6.
*/
@RestController
public class HelloWorldController {

@RequestMapping(value = "/")
public String sayHello(){
return "Hello World!";
}
}
于是乎,便认为没有问题,很明显并没有关闭GET方式访问,继续排查问题,既然告诉我405,那我维基百科查一下405是什么鬼?维基百科上解释如下:
405 Method Not Allowed
请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow头信息用以表示出当前资源能够接受的请求方法的列表。例如,需要通过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。
鉴于PUT,DELETE方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。
 
有点意思,便想到是不是某个程序占用了8090端口,导致我访问失败,我查看了一下8090端口是不是当前被其他程序占用:
lsof -i tcp:8090
得到如下反馈:
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Shadowsoc 11125  bwh   19u  IPv4 0xf85d3f83ab0d294d      0t0  TCP localhost:8090 (LISTEN)
Shadowsoc 11125  bwh   23u  IPv6 0xf85d3f83d1ab3dfd      0t0  TCP localhost:8090 (LISTEN)
我去,这不是shadowsocks的本地代理端口吗,原来是这个原因,但是springboot也没有在启动的时候报错,起码应该给我一个提示:该端口已经被占用吧?好吧,可能是我想多了!
赶紧换一个空闲的端口:9090
重启应用,继续访问,得到了我想要的HelloWorld。
最后引用小马哥的一句话:“处处留心皆学问“!
希望此次分析能够帮助遇到此类问题的小伙伴
已邀请:

itmuch.com - 《Spring Cloud与Docker微服务架构实战》作者

赞同来自: 泥瓦匠BYSocket strongant fishinhouse

哈哈 很好玩。spring boot这个问题我没遇到过,但是我遇到过类似的,也分享一下吧。
我用hexo写博客的时候,执行命令
hexo s
按理,访问http://localhost:4000  就能访问到博客的首页,但是偏偏不然,是个空白,无论怎么刷都没反应。
后来执行命令:
lsof -i:4000
发现Foxit Reader(福昕PDF阅读器)占用了这个端口。很尴尬。
PS.
 

泥瓦匠BYSocket - bysocket.com

赞同来自: strongant fishinhouse

强 
lsof -i tcp:8090

要回复问题请先登录注册