[英]Error connecting to local MySQL instance from Google App Engine Java.
I have created a google app engine java project using the gradle build plugin. 我已经使用gradle build插件创建了一个Google App Engine Java项目。 The app engine version is 1.9.34. 应用引擎版本为1.9.34。 I am trying to connect local dev server to local mysql db for development and testing purposes. 我正在尝试将本地开发服务器连接到本地mysql数据库以进行开发和测试。 I am trying to connect local db as follows, 我正在尝试连接本地数据库,如下所示,
try {
Class.forName("com.mysql.jdbc.Driver");
url = "jdbc:mysql://localhost/testDB?user=root";
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
try {
conn = (Connection) DriverManager.getConnection(url, "root", "admin123$");
String statement = "INSERT INTO entries (firstName, lastName, phoneNo, email) VALUES( ? , ? , ?, ?)";
java.sql.PreparedStatement stmt = conn.prepareStatement(statement);
stmt.setString(1, newContact.getFirstName());
stmt.setString(2, newContact.getLastName());
stmt.setString(3, newContact.getPhoneNumber());
stmt.setString(4, newContact.getEmail());
int success = 2;
success = stmt.executeUpdate();
if (success == 1) {
System.out.println("Insert Successful");
} else if (success == 0) {
System.out.println("Insert error");
}
} catch (SQLException e) {
e.printStackTrace();
}
But keep getting the following error, 但是不断收到以下错误,
SEVERE: exception occurred while calling backend method java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:191) at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70) at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:215) at com.aarnam.whatsthescore.apis.AddressBookApi.createNewContact(AddressBookApi.java:67) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.google.appengine.tools.deve SEVERE:在com.google.appengine.tools.development上的java.lang.Class.forName(Class.java:191)上的java.lang.Class.forName0(本地方法)中调用后端方法java.lang.ExceptionInInitializerError时发生异常。 com.mysql.jdbc.NonRegisteringDriver.connect上com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65)的.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70) (NonRegisteringDriver.java:282)java.sql.DriverManager.getConnection(DriverManager.java:571)at java.sql.DriverManager.getConnection(DriverManager.java:215)at com.aarnam.whatsthescore.apis.AddressBookApi.createNewContact( AddressBookApi.java:67)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java com.google.appengine.tools.deve上的.lang.reflect.Method.invoke(Method.java:606) lopment.agent.runtime.Runtime.invoke(Runtime.java:130) at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:363) at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113) at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.goog 位于com.google.api.server.spi.SystemServiceServlet的com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:363)上的lopment.agent.runtime.Runtime.invoke(Runtime.java:130)。在javax.servlet的javax.servlet.http.HttpServlet.service(HttpServlet.java:637)的com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71)执行(SystemServiceServlet.java:113) org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)的.http.HttpServlet.service(HttpServlet.java:717)org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java) :1166)com的com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)at com.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)。 go.com.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128)位于com.goog的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) le.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:34 le.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)位于com.google.appengine.api.blobstore的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)。 dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)位于or.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)的com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter。 java:50)在org.mortbay的com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)的org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157) com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)上的.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)在com.google.appengine.tools.development.DevAppServerModulesFilter .doDirectModuleRequest(DevAppServerModulesFilter.java:34 9) at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:513) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.hand 9)在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)在com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)在org.mortbay.jetty位于org.mortbay.jetty上的org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)的.servlet.ServletHandler.handle(ServletHandler.java:388)。(SessionHandler.java:182) )atg.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)at com.google.appengine.tools.development上的org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)。 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)上的DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)在com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java: 513),位于org.mortbay.jetty.Server.hand上的org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) le(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) at java.security.AccessController.checkPermission(AccessController.java:559) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerF le(Server.java:326)org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)atg.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:938)org.mortbay.jetty .httpParser.parseNext(HttpParser.java:755)位于org.mortbay的org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)。 io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)atg.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)引起:java.security.AccessControlException:access denied(“java.lang。 RuntimePermission“”modifyThreadGroup“)java.security.AccessControl.checkPermission(AccessControlContext.java:372)java.security.AccessController.checkPermission(AccessController.java:559)java.lang.SecurityManager.checkPermission(SecurityManager.java:549) )com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkPermission(DevAppServerF) actory.java:429) at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454) at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315) at java.lang.Thread.init(Thread.java:391) at java.lang.Thread.init(Thread.java:349) at java.lang.Thread.(Thread.java:445) at java.util.TimerThread.(Timer.java:499) at java.util.Timer.(Timer.java:101) at java.util.Timer.(Timer.java:146) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:208) ... 53 more actory.java:429)位于java.lang.Thread的java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)的com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkAccess(DevAppServerFactory.java:454) .init(Thread.java:391)java.lang.Thread.init(Thread.java:349)java.lang.Thread。(Thread.java:445)java.util.TimerThread。(Timer.java: 499)java.util.Timer。(Timer.java:101)at java.util.Timer。(Timer.java:146)at com.mysql.jdbc.ConnectionImpl。(ConnectionImpl.java:208)... 53更多
Have been stuck at this since last few days. 自从过去几天以来一直困在这里。 Any help is appreciated. 任何帮助表示赞赏。
Thanks!! 谢谢!!
Have you added below dependency in your app engine gradle ? 您是否在App Engine Gradle中添加了以下依赖项?
compile 'mysql:mysql-connector-java:5.1.16'
If yes, you can also check to change the version of app engine to 1.9.18, it works with me, I had issues in past with version 1.9.22 and later ones. 如果是,您还可以检查将应用引擎的版本更改为1.9.18,它与我合作,我在过去的版本1.9.22及更高版本中遇到了问题。
First, make sure you have enabled MySQL Connector/J in appengine-web.xml
as follows. 首先,确保在appengine-web.xml
启用了MySQL Connector / J,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
...
<use-google-connector-j>true</use-google-connector-j>
</appengine-web-app>
Then use something like the below code snippet to connect to the database. 然后使用类似下面的代码片段连接到数据库。
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
// Load the class that provides the new "jdbc:google:mysql://" prefix.
Class.forName("com.mysql.jdbc.GoogleDriver");
url = "jdbc:google:mysql://your-project-id:your-instance-name/your-database?user=root";
} else {
// Local MySQL instance to use during development.
Class.forName("com.mysql.jdbc.Driver");
url = "jdbc:mysql://127.0.0.1:3306/your-database?user=root";
// Alternatively, connect to a Google Cloud SQL instance using:
// jdbc:mysql://ip-address-of-google-cloud-sql-instance:3306/your-database?user=root
}
Actually I have tried both of the options suggested above. 实际上我已经尝试了上面提到的两个选项。 Both the changes are necessary to get the app working but the issue in my case was the mysql connector version. 这两个更改都是使应用程序正常工作所必需的,但我的案例中的问题是mysql连接器版本。 I was using 5.1.16 but then I updated it to 5.1.38 and that fixed the problem. 我使用的是5.1.16,但随后将其更新为5.1.38,从而解决了该问题。
Thank you all for your help and suggestions! 谢谢大家的帮助和建议! :) :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.