Google App Engine - png.xml中的参数未在appengine-web.xml中读取

时间:2018-02-17 08:46:19

标签: maven google-app-engine pom.xml google-cloud-sql

亲爱的Stackoverflow社区,

我想做什么: 使用Eclipse,将GoogleAppEngine与Google CloudSQL结合使用以连接数据库并打印结果

我关注哪个教程: 它是使用Cloud SQL for MySQL""教程就在这里: https://cloud.google.com/appengine/docs/standard/java/cloud-sql/using-cloud-sql-mysql

到目前为止我取得了什么成就: 当我硬编码用户,传递和数据库到appengine-web.xml时,我可以使它工作并打印出数据库中的值:

def checkedTrace(img0, img1, p0, back_threshold = 1.0):
    p1, _st, _err = cv.calcOpticalFlowPyrLK(img0, img1, p0, None, **lk_params)
    p0r, _st, _err = cv.calcOpticalFlowPyrLK(img1, img0, p1, None, **lk_params)
    d = abs(p0-p0r).reshape(-1, 2).max(-1)
    status = d < back_threshold
return p1, status

然后,在HelloAppEngine.java中,使用System.getProperty(&#34; cloudsql&#34;)获取此URL:

<system-properties>
    <property name="cloudsql" value="jdbc:google:mysql://XXXYYYZZZ:europe-west3:XXXYYYZZZ/Database?user=root&amp;password=12345" />
  </system-properties>

我不明白的是: 根据教程,我不必在appengine-web.xml中对用户,传递和数据库值进行硬编码,而是将它们放在pom.xml文件中,然后&#34; fetch&#34;那些值来自那里使用$ {INSTANCE_CONNECTION_NAME},/ $ {database},user = $ {user}和password = $ {password}。

我的pom.xml文件包含以下信息:

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"));
}

还有:

 <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>

所以,最后一个问题: 我错过了在appengine-web.xml中使用$ {placeholder}不起作用,而在那里硬编码必要的信息会有效吗?

我很感激任何帮助:)

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案: 当您添加新的Google App Engine标准应用时,pom文件包含以下部分:

{{main.adminArticleReplyForm}}

Eclipse显示警告:“此app引擎mavin插件已弃用”,这让我很怀疑。

查看由google链接的完整pom.xml文件: https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/appengine-java8/cloudsql/pom.xml

我看到他们的插件部分看起来不一样了:

<plugins>
  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>2.3</version>
    <executions>
      <execution>
        <phase>compile</phase>
        <goals>
          <goal>display-dependency-updates</goal>
          <goal>display-plugin-updates</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>${appengine.maven.plugin.version}</version>
  </plugin>

  <plugin>
       <groupId>com.google.appengine</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>1.9.62</version>
    </plugin>


</plugins>

我没有看过这部分,因为它没有在教程主页上明确提到: https://cloud.google.com/appengine/docs/standard/java/cloud-sql/using-cloud-sql-mysql

使用此插件部分替换我的插件部分就可以了。

我猜的部分
 <plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
      <webResources>
        <!-- in order to interpolate version from pom into appengine-web.xml -->
        <resource>
          <directory>${basedir}/src/main/webapp/WEB-INF</directory>
          <filtering>true</filtering>
          <targetPath>WEB-INF</targetPath>
        </resource>
      </webResources>
    </configuration>
  </plugin>

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>1.3.1</version>
    <configuration>
      <deploy.promote>true</deploy.promote>
      <deploy.stopPreviousVersion>true</deploy.stopPreviousVersion>
    </configuration>
  </plugin>

放置是负责任的。所以,问题解决了:))