亲爱的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&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}不起作用,而在那里硬编码必要的信息会有效吗?
我很感激任何帮助:)
答案 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>
放置是负责任的。所以,问题解决了:))