Chère communauté Stackoverflow,
ce que j'aimerais faire : en travaillant avec Eclipse, utiliser GoogleAppEngine en combinaison avec Google CloudSQL pour se connecter à une base de données et imprimer les résultats.
Quel tutoriel dois-je suivre ? : C'est le tutoriel "utiliser Cloud SQL pour MySQL" juste ici : https://cloud.google.com/appengine/docs/standard/java/cloud-sql/using-cloud-sql-mysql
ce que j'ai réalisé jusqu'à présent : Je peux le faire fonctionner et imprimer les valeurs de ma base de données lorsque je code en dur l'utilisateur, le pass et la base de données dans appengine-web.xml :
<system-properties>
<property name="cloudsql" value="jdbc:google:mysql://XXXYYYZZZ:europe-west3:XXXYYYZZZ/Database?user=root&password=12345" />
</system-properties>
et ensuite, dans HelloAppEngine.java, récupérer cette url avec System.getProperty("cloudsql") :
final String selectSql = "SELECT favID from favs";
PrintWriter out = resp.getWriter();
resp.setContentType("text/plain");
String url = System.getProperty("cloudsql");
try (
Connection conn = DriverManager.getConnection(url);
ResultSet rs = conn.prepareStatement(selectSql).executeQuery()) {
out.print("Last 10 visitsss:\n");
while (rs.next()) {
out.println(rs.getString("favID"));
}
} catch (SQLException e) {
out.println("fehlerddddd: " + e);
out.println(System.getProperty("cloudsql"));
}
Mais ce que je ne comprends pas : Selon le tutoriel, je ne dois pas coder en dur les valeurs de l'utilisateur, du mot de passe et de la base de données dans le fichier appengine-web.xml, mais plutôt les avoir dans un fichier pom.xml et ensuite "récupérer" ces valeurs à partir de là en utilisant ${INSTANCE_CONNECTION_NAME}, /${database}, user=${user} et password=${password}.
Mon fichier pom.xml contient ces informations :
<properties>
<appengine.maven.plugin.version>1.3.2</appengine.maven.plugin.version>
<appengine.api.sdk.version>1.9.62</appengine.api.sdk.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
<INSTANCE_CONNECTION_NAME>XXXYYYZZZ:europe-west3:faverdb</INSTANCE_CONNECTION_NAME>
<user>root</user>
<password>12345</password>
<database>XXYYZZ</database>
et aussi :
<dependency> <!-- Only used locally -->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version> <!-- v5.x.x is for production, v6.x.x EAP X DevAPI -->
</dependency>
<dependency>
<groupId>com.google.cloud.sql</groupId>
<!-- If using MySQL 6.x driver, use mysql-socket-factory-connector-j-6 instead -->
<artifactId>mysql-socket-factory</artifactId>
<version>1.0.5</version>
</dependency>
Donc, la dernière question : Qu'est-ce qui me manque pour que l'utilisation de ${placeholder} dans mon appengine-web.xml ne fonctionne pas alors que le codage en dur des informations nécessaires fonctionne immédiatement ?
J'apprécierais toute aide :)