基本上尝试通过Eclipse Java Web Project连接到我的Cloud SQL数据库
清单
1)将我的Google App Engine SDK更新为最新的1.9.34版本
2)将我的JDBC com.mysql.jdbc.Driver更新到最新的5.1.38版本
3)将JDBC驱动程序添加到构建路径
我无法连接到Google Cloud SQL并因此错误而崩溃:
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(DevAppServerFactory.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.<init>(Thread.java:445)
at java.util.TimerThread.<init>(Timer.java:499)
at java.util.Timer.<init>(Timer.java:101)
at java.util.Timer.<init>(Timer.java:146)
at com.mysql.jdbc.ConnectionImpl.<clinit>(ConnectionImpl.java:208)
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:283)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:233)
at com.dinuka.myapp.servlets.PlanServlet.doPost(PlanServlet.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
全天搜索并逐字浏览Stackoverflow上的每个相关问题。我准备拔头发了:D
这是我可靠的简单代码连接到我的数据库。无法相信我做错了什么:
public class MyServlet extends HttpServlet {
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String url = null;
try {
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://app_id:instance_id/data?user=root";
} else {
// Local MySQL instance to use during development.
Class.forName("com.mysql.jdbc.Driver");
url = "jdbc:mysql://instance-ip:3306/data?user=root";
}
} catch (Exception e) {
e.printStackTrace();
return;
}
PrintWriter out = resp.getWriter();
try {
Connection conn = DriverManager.getConnection(url);
System.out.println("Connection established");
out.println("Connection established");
try {
} finally {
conn.close();
}
} catch (SQLException e) {
out.append(e.getMessage());
e.printStackTrace();
}
}
}
请修复此错误,谷歌团队!在此期间,有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
最后!固定它!对于那些面临这个问题的人。以下是解决问题的方法!
第1步:保持道德并保持积极态度(相信我,我知道)
第2步:将您的Google App Engine SDK更新到最新版本。查看此链接中的最新SDK =&gt; https://cloud.google.com/appengine/downloads
第3步:将JDBC驱动程序更新为最新版本。查看此链接的最新信息=&gt; https://dev.mysql.com/downloads/connector/j/
第4步:以下是将JDBC jar正确添加到项目中的方法:将其复制并粘贴到lib文件夹(war / WEB-INF / lib)。右键单击Eclipse Project并单击Build Path - &gt;配置构建路径。点击“添加JAR”&#39;并转到您的lib文件夹并选择刚刚复制的mysql-connector-java文件。单击“应用”和“确定”。
第5步:清理并构建项目
第6步:我不知道这是否必要但是我们无论如何都要这样做。右键单击您的项目,然后转到“属性”。
第7步:展开“Google&#39;部分并选择App Engine。确保已启用(选中) Google Cloud SQL 并选择使用Google Cloud SQL实例单选按钮。
第8步:在该单选按钮的右侧,您会看到一个名为“配置”的链接。单击它并使用您的实例名称,数据库名称等填充字段,然后单击“确定”。
第9步:在我们之前看到的单选按钮下方,您应该看到名为“#strong> App Engine SQL实例&#”的标签旁边的另一个名为configure的链接39 ;.单击配置并使用实例名称,数据库名称等填充字段,就像我们之前所做的那样。单击“确定”并关闭“属性窗口”。
最后一步:再次清理并构建项目并运行它。如果您正确执行了所有步骤,则应该连接到强大的Google Cloud。
让我花太多时间来弄明白这一点,我知道我可以通过这个答案简化其他人的日子。祝你好运!
-Dinuka Jayasuriya,Future Googler;)