cleardb(mySQL)与Heroku(spring)的连接问题

cleardb(mySQL)与Heroku(spring)的连接问题,mysql,spring,heroku,spring-jdbc,cleardb,Mysql,Spring,Heroku,Spring Jdbc,Cleardb,我正在创建一个springboot应用程序,它的数据存储在mysql数据库中。我使用了cleardb作为附加组件,并将该应用程序部署到Heroku。当我运行应用程序(即heroku open)时,主页(index.html)会成功显示,因为它不需要访问mySQL数据库。但是,所有需要访问mySQL数据库的页面都不会显示并返回以下错误: 出现意外错误(类型=内部服务器错误,状态=500)。 获取JDBC连接失败;嵌套异常为com.mysql.cj.jdbc.exceptions.Communica

我正在创建一个springboot应用程序,它的数据存储在mysql数据库中。我使用了cleardb作为附加组件,并将该应用程序部署到Heroku。当我运行应用程序(即heroku open)时,主页(index.html)会成功显示,因为它不需要访问mySQL数据库。但是,所有需要访问mySQL数据库的页面都不会显示并返回以下错误:

出现意外错误(类型=内部服务器错误,状态=500)。 获取JDBC连接失败;嵌套异常为com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链路故障成功发送到服务器的最后一个数据包是0毫秒前的。驱动程序尚未从服务器收到任何数据包

以下是我的一些代码:

数据库配置

@Configuration
CLEARDB_DATABASE_URL: mysql://b---------9:9--------@us-cdbr-iron-east-05.cleardb.net/heroku_f61b74207636b77?reconnect=true
DATABASE_URL:         'mysql://b---------9:9--------@us-cdbr-iron-east-05.cleardb.net/heroku_f61b74207636b77?reconnect=true'
公共类数据库配置{

@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource dataSource) {
    return new NamedParameterJdbcTemplate(dataSource);
}

@Bean
public DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost/NBA");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    return dataSource;
}
}

pom.xml插件

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
需要注意的一些事项:

  • 我的应用程序.properties文件当前为空

  • 当我在localhost:8080上运行应用程序时,它运行得非常好


非常感谢所有帮助。

对于您的情况,您必须根据数据库url(heroku配置)更改数据源配置:

我还建议您在application.properties中使用以下内容,而不是使用datasource bean:

spring.datasource.username=
spring.datasource.password=
spring.datasource.url=

同样非常重要的是:在heroku中更改数据库密码,不要将其写在internet上

对于您的情况,您必须根据您的数据库url(heroku配置)更改数据源配置:

我还建议您在application.properties中使用以下内容,而不是使用datasource bean:

spring.datasource.username=
spring.datasource.password=
spring.datasource.url=

同样重要的是:在heroku中更改您的数据库密码,不要将其写在互联网上

谢谢您的回复!我做了你注意到的更改,但现在我得到了一个PreparedStatementCallback;错误的SQL语法错误。错误页面(状态500)显示:“嵌套异常为java.sql.SQLSyntaxErrorException:Table‘heroku_f61b74207636b77.players’不存在”^我假设此错误是因为clearDB数据库中不存在‘players’表。有没有办法将当前的mySQL表克隆到cleardb数据库上?有。您有2种可能:1)使用上面发布的连接数据(数据库\ url.用户名和密码),您可以连接到clearDB并从例如mysql workbench执行CREATEPLAYERS table语句。2) 创建一个带有表和实体注释的实体类Players,并将spring.jpa.hibernate.ddl auto=create放在application.properties中。然后,在每次开始应用程序后,都会创建表格。我让一切都顺利进行。非常感谢你的帮助。非常感谢!谢谢你的回复!我做了你注意到的更改,但现在我得到了一个PreparedStatementCallback;错误的SQL语法错误。错误页面(状态500)显示:“嵌套异常为java.sql.SQLSyntaxErrorException:Table‘heroku_f61b74207636b77.players’不存在”^我假设此错误是因为clearDB数据库中不存在‘players’表。有没有办法将当前的mySQL表克隆到cleardb数据库上?有。您有2种可能:1)使用上面发布的连接数据(数据库\ url.用户名和密码),您可以连接到clearDB并从例如mysql workbench执行CREATEPLAYERS table语句。2) 创建一个带有表和实体注释的实体类Players,并将spring.jpa.hibernate.ddl auto=create放在application.properties中。然后,在每次开始应用程序后,都会创建表格。我让一切都顺利进行。非常感谢你的帮助。非常感谢!