Spring Boot / MySql :: SQLException:用户'user1'@'dhcp-etc'的访问被拒绝(使用密码:是)

时间:2018-12-23 20:28:42

标签: mysql spring spring-boot amazon-rds

在阅读并尝试了类似帖子的答案后,我想问这个问题。我的问题与迁移到Spring Boot 2.0.0有关吗?

在本地或RDS AWS上创建任何MySql数据库后,我无法将Spring Boot 2.0.0应用程序连接到该数据库。我仍然看到异常:...用户的访问被拒绝...(使用密码:是)。

重要:使用以下简单的Java程序,我可以!访问AWS RDS MySql数据库。我还可以创建表等。

echo "Requesting number...";
$url = 'api.php'; # changed from the actual website

$postdata = http_build_query(
    array(
        'metod' => 'get_number', # misspelled because it is not an English website
        'apikey' => 'XXXXXXXXXXXXXXXXXXXXXXXXX',
        'country' => 'RU',
        'service' => 'XXXXX'
    )
);

$opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
);

$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
print_r($result);

使用简单的Spring Boot 2.0.0应用程序,我无法建立连接。首先,我收到此错误:

  

2018-12-25 10:36:59.670错误7184-[[主要]   com.zaxxer.hikari.pool.HikariPool:HikariPool-1-异常   在池初始化期间。

     

java.sql.SQLException:用户被拒绝访问   'dbuser'@'dhcp-etc'(使用密码:是)

进一步,我收到此错误:

  

java.lang.IllegalStateException:无法加载ApplicationContext

     

原因:org.springframework.beans.factory.BeanCreationException:   创建类中定义的名称为'entityManagerFactory'的bean时出错   路径资源   [org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaConfiguration.class]:   调用init方法失败;嵌套异常为   javax.persistence.PersistenceException:[PersistenceUnit:默认]   无法建立Hibernate SessionFactory,原因是:

     

javax.persistence.PersistenceException:[PersistenceUnit:默认]   无法建立Hibernate SessionFactory,原因是:

     

org.hibernate.exception.GenericJDBCException:无法打开JDBC   执行DDL的连接原因:java.sql.SQLException:访问   拒绝用户'dbsetup'@'dhcp-ipaddress-etc-.nl'(使用密码:   是)

并且:

  

org.springframework.jdbc.support.MetaDataAccessException:无法   获取用于提取元数据的连接;嵌套异常为   org.springframework.jdbc.CannotGetJdbcConnectionException:失败   获取JDBC连接;嵌套异常是java.sql.SQLException:   用户'dbuser'@'dhcp-etc'的访问被拒绝(使用密码:是)

这是我的application.properties文件:

Class.forName("com.mysql.jdbc.Driver");
// Username and password created via MySQL workbench
String username = "dbuser";
String password = "dbpassword";
String jdbcUrl = "jdbc:mysql://myhostname:3306/mydatabase?user=" + username + "&password=" + password;
Connection con = DriverManager.getConnection(jdbcUrl);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(selectStmt);

在连接字符串中使用此添加项无效:?useSSL = false

我的pom.xml包含:

spring.datasource.url=jdbc:mysql://myhostname:3306/mydatabase
spring.datasource.username=dbuser
spring.datasource.password=dbpassword
#REMOVED: spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect

从PC正确连接(使用Spring Boot)后,我将继续使用EC2实例进行开发。

AWS RDS MySQL版本:5.6.41。

2 个答案:

答案 0 :(得分:0)

让父级加载其兼容的mysql连接器库,因此请尝试不使用版本。

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>

答案 1 :(得分:0)

请仔细检查您的application.properties文件,您的数据库用户名或密码后不应有空格。 或者,您可以通过这种方式编写:
spring.datasource.url = jdbc:mysql:// localhost:3306 / dbname?user = dbuser&password = dbpassword