복붙노트

[SQL] 앱 엔진 자바 서블릿은 클라우드 SQL에 연결되지 않습니다

SQL

앱 엔진 자바 서블릿은 클라우드 SQL에 연결되지 않습니다

I 앱 엔진을 사용하여 자바 웹 서블릿을 만든 서블릿은 데이터베이스에 대한 요청을합니다. 내가 로컬 데이터베이스를 사용하여 서블릿 로컬 테스트하고 완벽하게 일했다, 나는 다음 로컬 서블릿을 테스트하기 위해 진행하지만 istead이도 완벽하게 작동, 클라우드 SQL 데이터베이스를 액세스.

내 문제는 내가 서블릿을 배포 한 후에 발생한다. 배치되면 모든 데이터베이스 요청은 다음을 반환합니다 :

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.

나는 구름 콘솔에서 확인하고, 내 응용 프로그램이 제대로 액세스 제어 탭에서 클라우드 SQL 공인 앱 엔진 응용 프로그램에 추가되었습니다.

사람이 배치 된 응용 프로그램 엔진 서블릿과 비슷한 문제가 있었나요? 밖으로 어떤 해결책이나 조언이? 나는 어떤 모든 도움을 주셔서 감사합니다 것입니다!

최신 정보:

위의 오류는 DB를 액세스하려면 다음 코드를 사용하여 생성 된

Class.forName("com.mysql.jdbc.Driver");
Url = "jdbc:mysql://<ip-address-cloudsql>:3306/<dbname>";
Connection con = DriverManager.getConnection (Url,"root",<password>);

동일한 오류는 여기에 도시 된 예 https://developers.google.com/appengine/docs/java/cloud-sql/ 코드와 매우 유사하다 참고로이 코드를 사용하여 달성했다

Class.forName("com.mysql.jdbc.GoogleDriver");
Url = "jdbc:google:mysql://<appID:instanceID>/<dbname>? 
user=root&password=<password>";
Connection con = DriverManager.getConnection (Url);

나는 APPID 및 인스턴스 ID를 사용하여 URL을 설정에 왔을 때 서식 끝이 유래 포스트에 표시 다음 : com.mysql.jdbc.exceptions.jdbc4.CommunicationsException :

다음 다른 오류가 발생이 코드를 사용 :

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

내 cloudsql 데이터베이스 응용 프로그램 엔진 서블릿을 따르도록 설정되어 있기 때문에 나는 그것이 로컬 호스트 말한다 있으리라 믿고있어. 또한, 로컬 서블릿을 실행하고 클라우드 SQL 데이터베이스에 액세스 할 때이 방법 모두 잘 근무 것을 알고있다.

이견있는 사람? 내가 시도하는 다른 모르겠어요 :

해결법

  1. ==============================

    1.승인 된 앱 엔진 애플리케이션에서 클라우드 SQL에 연결하는 경우, 암호는 (당신이 암호를 사용하여 연결을 시도하면 실제로 실패 할) 필요하지 않습니다.

    승인 된 앱 엔진 애플리케이션에서 클라우드 SQL에 연결하는 경우, 암호는 (당신이 암호를 사용하여 연결을 시도하면 실제로 실패 할) 필요하지 않습니다.

    JDBC로 연결 문자열을 변경 : 구글 : MySQL이 : // / ? 및 패스워드를 사용자 생략 = 루트 = <암호> 파트

  2. ==============================

    2.이 앱 엔진에게 응용 프로그램을 승인 한 경우, 그래서 그냥 = ""당신에게 비밀을 지역이기 때문에 당신은 당신이 암호를 액세스 제어 설정에 응용 프로그램 엔진을 필요로하지 않는다; 다른 호스트에서 실행됩니다 예를 들어, phpMyAdmin을, 명령 줄 또는 GCE VM 원격 뭔가를 사용하지만 경우 TCP, SSH 또는 HTML을 통해 실행 당신은 암호 = "뭔가"를 가질 필요가 있다는; 여기서 뭔가가 액세스 제어에서 당신에 의해 설정된다.

    이 앱 엔진에게 응용 프로그램을 승인 한 경우, 그래서 그냥 = ""당신에게 비밀을 지역이기 때문에 당신은 당신이 암호를 액세스 제어 설정에 응용 프로그램 엔진을 필요로하지 않는다; 다른 호스트에서 실행됩니다 예를 들어, phpMyAdmin을, 명령 줄 또는 GCE VM 원격 뭔가를 사용하지만 경우 TCP, SSH 또는 HTML을 통해 실행 당신은 암호 = "뭔가"를 가질 필요가 있다는; 여기서 뭔가가 액세스 제어에서 당신에 의해 설정된다.

  3. ==============================

    3.연결에서 "통신 연결 실패 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException을"당신이 얻는 수 있습니다 이유를 찾고 구글에서 모든 사람에게.

    연결에서 "통신 연결 실패 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException을"당신이 얻는 수 있습니다 이유를 찾고 구글에서 모든 사람에게.

    당신은 테스트 서버에서 전화하는 경우 있는지 확인 IP 허용됩니다.

    나는 친구 집에서 테스트되었고,이 도움이되지 않는 오류가 나타나고 있었다.

  4. ==============================

    4.Google 클라우드 SQL로 연결할 때주의해야합니다 : 당신의 연 연결을 닫습니다 - 투 새 연결을 만들려고 할 때 지수 백 오프 알고리즘을 사용 -to. 자세한 내용은 참조하십시오 : https://cloud.google.com/sql/faq

    Google 클라우드 SQL로 연결할 때주의해야합니다 : 당신의 연 연결을 닫습니다 - 투 새 연결을 만들려고 할 때 지수 백 오프 알고리즘을 사용 -to. 자세한 내용은 참조하십시오 : https://cloud.google.com/sql/faq

  5. ==============================

    5.당신이 봄 부팅 응용 프로그램에서 application.properties를 사용하는 경우, 그럼 그냥 선 아래 application.properties에 넣어 :

    당신이 봄 부팅 응용 프로그램에서 application.properties를 사용하는 경우, 그럼 그냥 선 아래 application.properties에 넣어 :

    spring.datasource.url: jdbc:mysql://google/<dbname>?cloudSqlInstance=<InstanceName>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=****&password=****
    
  6. from https://stackoverflow.com/questions/20896237/app-engine-java-servlet-does-not-connect-to-cloud-sql by cc-by-sa and MIT license