0

Google Cloud Endpoint에 클라우드 SQL에 연결하고 데이터 액세스 방법으로 가벼운 jdbc 래퍼 sql2o을 사용하려고합니다. Google Cloud Endpoint에서 Sql2o를 사용하여 Cloud SQL에 연결

@Api(name = "questionapi", version = "v1", description = "question api") 
public class QuestionService { 

    private static Sql2o sql2o = new Sql2o(
      "jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxxxx", "root", 
      "xxxxxxx"); 

    @ApiMethod(name = "get", httpMethod = HttpMethod.GET) 
    public List<Question> get() { 

     String q = "select * from questions"; 

     try (Connection conn = sql2o.open()) { 
      return conn.createQuery(q).executeAndFetch(Question.class); 
     } 
    } 

앱을 실행 한 후, 나는 API를 시도 localhost:8888/_ah/api/explorer를 방문 할 수 있습니다. 그러나 오류가 있습니다 :

org.sql2o.Sql2oException: Could not acquire a connection from DataSource - No suitable driver found for jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxxxx 

이 문제를 어떻게 해결할 수 있습니까?

편집 :

enter image description here

Maven 프로젝트로 변경 한 후

나는이 새로운 오류 메시지가 있어요 :

503 Service Unavailable 

- Show headers - 

{ 
"error": { 
    "message": "java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl", 
    "code": 503, 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "backendError", 
    "message": "java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl" 
    } 
    ] 
} 
} 

편집

그것은 새로운 날을, I 아직도 여기 붙어있어. 내가 무슨 짓을

는 필요한 파일 및 디렉토리에 사용할 준비가 비어있는 새 클라우드 엔드 포인트 백엔드 API 프로젝트입니다, 나는 엔드 포인트 골격 원형을 프로젝트를 다운로드 받는다는을 사용합니다.

즉시 앱 엔진에 배포하고 의미있는 값을 반환하려고합니다. 효과가 있었고, 단순한 'hellp world'문자열이 반환되었습니다.

다음으로 jdbc를 사용하여 cloud sql에 연결하려고했습니다. 그렇게하기 위해, 나는 에서 appengine-web.xml을

<use-google-connector-j>true</use-google-connector-j>을 추가 튜토리얼 here 을 따라 나는 모든 후 연결 문자열

Class.forName("com.mysql.jdbc.GoogleDriver"); 
     String url = "jdbc:google:mysql://xxxxxxxxxxxx:xxxxx?user=root"; 

     conn = DriverManager.getConnection(url); 
     ResultSet rs = conn.createStatement().executeQuery("SELECT 1 + 1"); 

enter image description here

의 다른 조합을 시도 , 나는 여전히이 오류 메시지가 나타납니다.

503 Service Unavailable 

- Show headers - 

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "backendError", 
    "message": "java.lang.NullPointerException" 
    } 
    ], 
    "code": 503, 
    "message": "java.lang.NullPointerException" 
} 
} 
+0

는 또한이 문제가 있지만 해결되지 수 ... – Micro

답변

1

이 오류는 jdbc 드라이버가 클래스 경로에서 발견되지 않을 때 발생합니다. 의존성을 어떻게 관리하고 있습니까? Maven을 사용합니까? 종속성 목록에 mysql jdbc 드라이버를 추가하면 오류가 수정되어야합니다.

귀하의 질문에 아무런 관련이없는 귀하의 코드에 다른 의견이 있습니다. 그러나 여기 어쨌든 온다. 연결을 종료하지 않으므로 아래의 코드 라인에 연결 누출이 있습니다. 결국 연결 풀이 고갈되고 응용 프로그램이 중단됩니다. return sql2o.open().createQuery(q).executeAndFetch(Question.class);

이 sql2o 사용할 때 그 일을 올바른 방법입니다 : try (Connection con = sql2o.open()) { return con.createQuery(q).executeAndFetch(Question.class); }

+0

나는 Maven 프로젝트로 변경하고 sql2o 항아리와 커넥터 J 항아리를 추가 파일을 메이븐 종속성으로 변환합니다. 이제 새로운 오류 메시지가 나타납니다. – Timeless

+0

GAE에서 mysql connector를 활성화 했습니까? https://cloud.google.com/appengine/docs/java/cloud-sql/# enable_connector_j – aaberg

+0

예, 새로운 XML 행을 추가했습니다. 문서의 메서드를 사용하여 데이터베이스에 연결하려고합니다. 그 후 sql2o를 사용하려고합니다. 어떤 생각? 너 구글 출신이야? – Timeless

관련 문제