3 votes

Google App Engine - les paramètres de pom.xml ne sont pas lus dans appengine-web.xml

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&amp;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 :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X