1

mysql を使用する Web アプリを作成しました。永続化には春を使用しました。すべてがローカルのTomcatサーバーで機能しました。それを cloudfoundary にアップロードし、指示に従って mysql サービスを作成し、それを Web アプリのサービスとして使用します。アプリを実行しようとすると、次の例外が発生しました。

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
    org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:573)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:812)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:868)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:876)
    com.tutorialspoint.StudentJDBCTemplate.create(StudentJDBCTemplate.java:19)
    com.tutorialspoint.Hello.doGet(Hello.java:58)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
    com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
    com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    java.sql.DriverManager.getConnection(DriverManager.java:582)
    java.sql.DriverManager.getConnection(DriverManager.java:154)
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:173)
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:164)
    org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149)
    org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119)
    org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:573)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:812)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:868)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:876)
    com.tutorialspoint.StudentJDBCTemplate.create(StudentJDBCTemplate.java:19)
    com.tutorialspoint.Hello.doGet(Hello.java:58)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

java.net.ConnectException: Connection refused
    java.net.PlainSocketImpl.socketConnect(Native Method)
    java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    java.net.Socket.connect(Socket.java:529)
    java.net.Socket.connect(Socket.java:478)
    java.net.Socket.<init>(Socket.java:375)
    java.net.Socket.<init>(Socket.java:218)
    com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
    com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
    com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2332)
    com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2369)
    com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    java.sql.DriverManager.getConnection(DriverManager.java:582)
    java.sql.DriverManager.getConnection(DriverManager.java:154)
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:173)
    org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:164)
    org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149)
    org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119)
    org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:573)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:812)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:868)
    org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:876)
    com.tutorialspoint.StudentJDBCTemplate.create(StudentJDBCTemplate.java:19)
    com.tutorialspoint.Hello.doGet(Hello.java:58)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.35
4

1 に答える 1

1

問題が解決しない場合: CF サービスへの接続を構成する方法は 2 つあります。

1) 「自動再構成」を利用する。Java アプリの場合、Spring フレームワークを使用している場合、ここのドキュメントに詳細が具体的に説明されています: http://docs.cloudfoundry.com/frameworks/java/spring/spring.html

2) Spring アプリ以外の Java アプリの場合、ホスト名やパスワードなど、CF でプロビジョニングされたサービスへの接続の詳細を明示的に考慮する必要があります。これらは、「VCAP_SERVICES」という名前の環境変数によって取得できます。このコード スニペットだけで、次のことが実現できます。

System.getenv("VCAP_SERVICES")

その後、プロパティを接続構成に設定します。

于 2012-12-12T03:24:06.213 に答える