Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SpringApplication.run実行時にBindExceptionが発生する #30

Closed
TakaDoi opened this issue Mar 13, 2016 · 5 comments
Closed

SpringApplication.run実行時にBindExceptionが発生する #30

TakaDoi opened this issue Mar 13, 2016 · 5 comments

Comments

@TakaDoi
Copy link

TakaDoi commented Mar 13, 2016

本書の内容に沿って、1.3.3に記載された「「Hello World!」を出力するWebアプリケーションの作成」を実行したのですが、
下記「実行結果」に記載した内容のエラーが発生します。

前回質問させていただいた際は、「rc/main/resources/application.yml」からポート番号を指定することで
解決可能と伺いましたが、インストールしたSTSフォルダなどに対して検索をかけましたところ、
該当するファイルが見つかりませんでした。

大変申し訳ないのですが、解決方法につきましてアドバイス願えませんでしょうか。
必要な情報が不足しておりましたらおっしゃっていただけますと幸いです。

【バージョン】
STS:3.7.3(32bit版)
Java:1.8.0_73
Maven:3.2.5

【実行結果】

2016-03-13 17:50:44.113  INFO 9152 --- [mple.App.main()] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-03-13 17:50:44.225 ERROR 9152 --- [mple.App.main()] o.a.coyote.http11.Http11NioProtocol      : Failed to start end point associated with ProtocolHandler ["http-nio-8080"]

java.net.BindException: Address already in use: bind
    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:343)
    at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:737)
    at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:471)
    at org.apache.coyote.http11.Http11NioProtocol.start(Http11NioProtocol.java:80)
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:986)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.addConnector(StandardService.java:237)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:186)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:149)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:287)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:961)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:950)
    at com.example.App.main(App.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.boot.maven.RunMojo$LaunchRunner.run(RunMojo.java:418)
    at java.lang.Thread.run(Thread.java:745)

2016-03-13 17:50:44.228 ERROR 9152 --- [mple.App.main()] o.apache.catalina.core.StandardService   : Failed to start connector [Connector[HTTP/1.1-8080]]

org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8080]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardService.addConnector(StandardService.java:237)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:186)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:149)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:287)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:961)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:950)
    at com.example.App.main(App.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.boot.maven.RunMojo$LaunchRunner.run(RunMojo.java:418)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: service.getName(): "Tomcat";  Protocol handler start failed
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:993)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 18 common frames omitted
Caused by: java.net.BindException: Address already in use: bind
    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:343)
    at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:737)
    at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:471)
    at org.apache.coyote.http11.Http11NioProtocol.start(Http11NioProtocol.java:80)
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:986)
    ... 19 common frames omitted
@kazuki43zoo
Copy link

たぶんプロジェクトをgithub上に公開して、リンク貼り付けた方が話が早そうな気がします。
ちなみに、「src/main/resources/application.yml」は自分で作るファイルですが、そのあたりの認識はあってますか?

@kazuki43zoo
Copy link

@TakahitoDoi

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-use-yaml-for-external-properties

↑のサンプルは、Tomcatのポートを デフォルトの8080から9000 に変更しています。
同じ要領で変更したいポート番号を指定すればこの問題は解決すると思います。

@making
Copy link
Owner

making commented Mar 13, 2016

application.ymlについては他の章で言及されています。
2.2.2とか
https://github.com/making/hajiboot-samples/blob/master/chapter02/2.2.2_hajiboot-jdbc/src/main/resources/application.yml

server.port: 9000

みたいな設定すればよいです。

@kiyopiko
Copy link

@TakahitoDoi
横やりですが、失礼します。
恐らくですが、OSの再起動をすれば「SpringApplication.run」の実行は可能なんですよね?
windowsであれば、コマンドプロンプトにて「netstat -ano」を実行してみてください。
前回起動時のtomcatが8080などのポートを占有しているのではないでしょうか?

8080や9000番を占有しているプロセスをkillしないとその事象は解決しないかと思います。

@TakaDoi
Copy link
Author

TakaDoi commented Mar 14, 2016

@kazuki43zoo
頂いたサンプルを参考に「src/main/resources/application.yml」を新規作成し、
server.port: 9000
を記述後に再度runコマンドを実行することで想定どおりの結果を得ることができました!

application.ymlについては、自動生成されるはずのものと思っておりました。
1.3.3で詰まっているのであれば、そこまでの内容でapplication.ymlはできているはずで、
それができていないのであれば、自分が何か手順を誤っているのではないかと思っておりました。
そういった理由から、1.3.3以降の内容を確認していないため、application.ymlのことが
2.2.2 で触れられていることにも気づきませんでした。

なお、事象が解決した後、試しに8080ポートにアクセスしてみたところ、
XDBからのユーザー認証確認が表示され、原因を探ってみたところ、以前学習用に入れたOracleが原因でした。
ただ、事象が発生した当初もnetstatは試していて、その際はOracleが8080を使っている節は伺えなかったため、Oracleが犯人であることに気付きませんでした。
ですが、実際にOracleのデータベース停止を実行してから再度8080ポートでHelloWorldを実行したところ、
今度は正常に接続できたので、Oracleが犯人で間違いないと思います。

今は事象が解消されてしまい、Oracleを再起動しても当時の状況が再現できないためどうすれば原因に気付くことができたのかが課題として残ってしまいましたが、今後、同様にポートに接続できなかった際は、
netstat と合わせて、実際にそのポートに接続してみるのも手かな、と思いました。

たくさんのご回答、ありがとうございました。
おかげで、ようやく先に進むことができそうです。

@making making closed this as completed Mar 15, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants