Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法加载JDBC驱动程序类';GoogleDriver';_Java_Mysql_Hibernate_Google App Engine_Google Cloud Sql - Fatal编程技术网

Java 无法加载JDBC驱动程序类';GoogleDriver';

Java 无法加载JDBC驱动程序类';GoogleDriver';,java,mysql,hibernate,google-app-engine,google-cloud-sql,Java,Mysql,Hibernate,Google App Engine,Google Cloud Sql,我面临一个非常奇怪的问题,我的应用引擎服务器无法加载其云SQL的GoogleDriver,下面是错误(它发生在我运行“mvn appengine:update”之后) appengine.properties ################### MySQL Configuration - Google Cloud App Engine ########################## jdbc.driverClassName=com.mysql.jdbc.GoogleDriver jdb

我面临一个非常奇怪的问题,我的应用引擎服务器无法加载其云SQL的GoogleDriver,下面是错误(它发生在我运行“mvn appengine:update”之后)

appengine.properties

################### MySQL Configuration - Google Cloud App Engine ##########################
jdbc.driverClassName=com.mysql.jdbc.GoogleDriver
jdbc.url=jdbc:google:mysql://mytestapp:testdb?user=someuser
jdbc.username=someuser
jdbc.password=******
jdbc.dialect=org.hibernate.dialect.MySQLDialect
在我的Spring上下文文件中,我有:

<context:property-placeholder location="classpath:appengine.properties" />
<bean
    id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close" >

    <property
        name="driverClassName"
        value="${jdbc.driverClassName}" />
    <property
        name="url"
        value="${jdbc.url}" />
    ...
有没有一种简单的方法可以在外部和GAE云SQL连接细节之间动态切换而不使用这种方法

if (SystemProperty.environment.value() ==
SystemProperty.Environment.Value.Production) {
    // Connecting from App Engine.
有什么想法吗?

  • 该类在应用程序引擎运行时中不自动可用。必须通过将
    true
    添加到appengine-web.xml来启用它。该文件记录在:
编辑以添加(来自以下评论):

  • 此外,当从GAE连接到云SQL时,应该将密码字段留空
  • 您还应该确保,如果您的代码在GAE之外运行(例如,在您的工作站上、在GCE上、在Jenkins构建中),它将使用stock MySQL连接器,因为Google连接器仅在GAE上可用
  • 您可能还需要研究如何使用股票MySQL驱动程序,它可以从GAE和其他连接中工作。这里有一个演示

MySQL JDBC驱动程序JAR不能包含类GoogleDriver。刚刚检查,JAR不包含此类。我使用的是“mysql-connector-java-5.1.14”(在我的pom.xml中指定),它可以与“mvn appengine:devserver”配合使用,但我的理解是,一旦它部署到谷歌云中的实际(远程)appengine(即com.mysql.jdbc.GoogleDriver),它将使用完全不同的驱动器,我从我的Google Cloud Developer控制台-Cloud SQL中的说明中获得了这些信息。看起来您的项目类路径中缺少了一些库。错误非常具体:java.lang.ClassNotFoundException:com.mysql.jdbc.GoogleDriveRope在JAR中-您看到该类了吗?如果没有,你有你的答案。我认为MySQL JAR有com.MySQL.jdbc.Driver用于连接该数据库。尝试更改名称。伙计们,你没有抓住要点,Appengine应该在你部署到谷歌云后提供jar,所有这些评论都假设这是一个普通的web应用。谢谢你的回答David,这已经配置好了,即使在部署了“mvn Appengine:update”之后也没有帮助通过发布管道,我得到了相同的错误:“无法加载JDBC驱动程序类‘com.mysql.JDBC.GoogleDriver’”,您还有其他建议吗?是否有一种方法可以让我通过ssh连接到appengine框中进行故障排除?(1)您无法通过ssh连接到App Engine。(2) 请确认这是您在GAE而不是开发服务器上遇到的错误。(3) 在spring/hibernate舞蹈之前,尝试显式调用
Class.forName(“com.mysql.jdbc.GoogleDriver”)
。(4) 你能不能得到一个更完整的回溯,这样我就可以看到你的堆栈是如何加载类的?(1)好吧。(2) 我在运行“mvn appengine:update-DenvTarget=Production-DskipTests”时没有看到这个错误,我得到了一个奇怪的“java.lang.NoSuchFieldError:INSTANCE”(这是由于与Hibernate jar版本不兼容),我在命令中引入了“mvn clean..”后解决了这个问题(我认为appengine:update会隐式地为我这样做)。(3)我已经设置了驱动程序,现在似乎正在正确加载它,但我得到了一个新的错误:“org.apache.commons.dbcp.SQLNestedException:无法从(2)创建PoolableConnectionFactory(拒绝用户'root'@'localhost'的访问)这段代码似乎是在您的工作站上运行,而不是在应用程序引擎上运行,可能是因为测试正在运行。正如我链接到GoogleDriver的文档页面上提到的,它只在GAE上工作,而不是在开发环境中;在本地,您应该使用stock MySQL驱动程序。示例代码通过
com.google.appengine.api.utils.SystemProperte检查这一点rty.environment.value()==SystemProperty.Environment.Value.Production
;我不知道如何在spring/hibernate World中实现这一点再次感谢您的评论David,感谢您的关注。您知道如何定制计算引擎VM为我执行的每个git推送而运行的管道实例/作业吗?我可以使用SSH连接到它,但它不会记录ognize我的环境变量,我也无法访问Jenkins Web控制台:(关于如何自定义mvn调用或至少设置Jenkins作业可以识别的环境变量,有什么想法吗?
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>mytestapp</application>
    <version>1</version>
    <threadsafe>true</threadsafe>
    <sessions-enabled>true</sessions-enabled>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>

    <use-google-connector-j>true</use-google-connector-j>
</appengine-web-app>
################### MySQL Configuration - Google Cloud App Engine ##########################
jdbc.driverClassName=com.mysql.jdbc.GoogleDriver
jdbc.url=jdbc:google:mysql://*******testapp:testsqldb?user=root
jdbc.username=root
jdbc.password=*****
jdbc.dialect=org.hibernate.dialect.MySQLDialect
if (SystemProperty.environment.value() ==
SystemProperty.Environment.Value.Production) {
    // Connecting from App Engine.