我一直在努力解决使用Java的Google App Engine中的问题几天。
当我尝试请求连接到Cloud Sql实例时,很多次(大约50%的时间),连接返回一个空值,在尝试调用Cloud Sql查询时产生几个NullPointerException消息(调用.prepareCall时) (stored_proc))。
我在项目服务中拥有最新的App Engine Java SDK,与使用Python构建的其他使用此Java后端的服务共享。
有可能在一定时间之后实例崩溃(我现在只是测试,所以我使用默认的scalation)?
这是返回null的代码:
Class.forName("com.mysql.jdbc.GoogleDriver");
url = "jdbc:google:mysql://project:instance/database?user=root";
log.info(url);
return DriverManager.getConnection(url);
这是我配置文件的一部分:
<application>app</application>
<module>mod</module>
<version>1</version>
<threadsafe>true</threadsafe>
<use-google-connector-j>true</use-google-connector-j>
我尝试了其他帖子的几条建议,但都没有成功。
任何建议都会受到欢迎,谢谢。
答案 0 :(得分:1)
使用Google Cloud SQL和App引擎时,我遇到了同样的问题。
我通过自己管理连接池解决了这个问题。我意识到当您为每个请求请求新连接并在完成线程时关闭它。其他请求将返回null,导致NullPointException。
我决定做以下事情,这对我来说已经有2年了。
答案 1 :(得分:0)
我会将此作为答案添加,因为它不完全是Chrispinus所提到的,尽管他给了我一个很好的解决方案。
我深入研究了代码,发现有些方法没有关闭数据库连接。我以为所有人都这样做,但看着每种方法,我发现我错了。
所以,虽然听起来很明显,但检查连接正在关闭(或管理,如Chrispinus所说)。