【问题标题】:Hibernate is able to connect to mysql but Spring JPA does notHibernate 能够连接到 mysql 但 Spring JPA 不能
【发布时间】:2019-05-10 14:31:43
【问题描述】:

我正在开发一个已经与 hibernate 一起工作的基本应用程序,并希望添加 spring JPA 功能以使其更简单。

当我使用 hibernate 进行测试时,我能够毫无问题地连接到 mysql 数据库。但是当我从 spring boot 测试应用程序时,数据库访问失败。我在 hibernate.cfg.xml 和 application.properties 中都给出了相同的凭据。但不确定为什么弹簧访问失败。

我尝试将权限授予用户。但还是不行。

    GRANT ALL PRIVILEGES ON *.* TO 'logesh'@'localhost' WITH GRANT OPTION;

hibernate.cfg.xml

    <hibernate-configuration>
    <session-factory>
    <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/devops</property>
    <property name="hibernate.connection.username">logesh</property>
    <property name="hibernate.connection.password">logesh</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <property name="hbm2ddl.auto">create</property>
    <property name="hibernate.show_sql">true</property>

application.properties

    spring.datasource.url=jdbc:mysql://localhost:3306/devops
    spring.datasource.username=logesh
    spring.datasource.password=logesh   
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
    spring.jpa.generate-ddl=true
    spring.jpa.hibernate.ddl-auto = create

以下是我在春季启动时遇到的错误:

    java.sql.SQLException: Access denied for user 'logesh'@'localhost' (using password: YES)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207) ~[mysql-connector-java-8.0.13.jar:8.0.13]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467) [HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541) [HikariCP-3.2.0.jar:na]

下面是 MySQL 通用日志,我们可以看到 spring boot 登录失败。随后,当尝试使用休眠时,它能够登录。

    2018-12-09T12:48:52.494621Z   150 Connect   logesh@localhost on devops using SSL/TLS
    2018-12-09T12:48:52.494773Z   150 Connect   Access denied for user 'logesh'@'localhost' (using password: YES)
    2018-12-09T12:48:54.243711Z   151 Connect   logesh@localhost on devops using SSL/TLS
    2018-12-09T12:48:54.243881Z   151 Connect   Access denied for user 'logesh'@'localhost' (using password: YES)
    2018-12-09T12:48:56.328126Z   152 Connect   logesh@localhost on devops using SSL/TLS
    2018-12-09T12:48:56.328291Z   152 Connect   Access denied for user 'logesh'@'localhost' (using password: YES)
    2018-12-09T13:10:46.485311Z   153 Connect   root@localhost on devops using SSL/TLS
    2018-12-09T13:10:46.486314Z   153 Query select @@version_comment limit 1
    2018-12-09T13:11:07.220308Z   153 Quit  
    2018-12-09T13:12:52.763898Z   154 Connect   logesh@localhost on devops using SSL/TLS
    2018-12-09T13:12:52.764643Z   154 Query select @@version_comment limit 1
    2018-12-09T13:13:15.186763Z   154 Quit  
    2018-12-09T13:27:57.857455Z   155 Connect   logesh@localhost on devops using SSL/TLS
    2018-12-09T13:27:57.861872Z   155 Query /* mysql-connector-java-8.0.13 (Revision: 66459e9d39c8fd09767992bc592acd2053279be6) */SELECT  @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_write_timeout AS net_write_timeout, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@transaction_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
    2018-12-09T13:27:57.877332Z   155 Query SET NAMES utf8mb4

我被困在这里,任何帮助将不胜感激。

回复评论:

    mysql> GRANT ALL PRIVILEGES ON . TO 'logesh'@'localhost' IDENTIFIED BY '%logesh%' WITH GRANT OPTION;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '. TO 'logesh'@'localhost' IDENTIFIED BY '%logesh%' WITH GRANT OPTION' at line 1
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'logesh'@'localhost' IDENTIFIED BY '%logesh%' WITH GRANT OPTION;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '%logesh%' WITH GRANT OPTION' at line 1
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'logesh'@'localhost' WITH GRANT OPTION;
    Query OK, 0 rows affected (0.01 sec)

我只能执行我已经尝试过的第三个命令。

编辑: 这个问题不是Java JDBC Access denied for user 的重复,因为我在发布这个问题之前已经尝试了那里推荐的所有解决方案。

【问题讨论】:

  • 上授予所有权限。 TO 'logesh'@'localhost' IDENTIFIED by '%logesh%' WITH GRANT OPTION;
  • @INDRESHKHANDELWAL :我已经尝试了这些命令,但没有奏效......我也会发布那个结果......
  • 您能否检查一下属性文件中您的用户名或密码后面是否有空格。如果logesh后面有空格,删除即可。
  • 非常感谢!有尾随空格。我更正了它,它现在可以工作了:)

标签: mysql spring hibernate spring-boot


【解决方案1】:

用户名后面似乎有一些尾随空格。
请检查属性文件中您的用户名或密码后是否有空格。如果logesh后面有空格,删除即可。

【讨论】:

    【解决方案2】:

    您使用的是什么版本的 Spring Boot 和 MySQL?我创建了一个最小的应用程序,它工作得很好(源代码:https://github.com/behrangsa/stackoverflow-q53692999)。

    还要注意 MySQL 的当前 JDBC 驱动程序类名称是 com.mysql.cj.jdbc.Driver

    运行 MySQL

    ↪ docker run -P --name some-mysql -e MYSQL_ROOT_PASSWORD=logesh -d mysql:8                                                                                                   00:52:54
    cc395e45faa5d1cc3fdff3eeb35a6491202b75862ae5a519901c10fe02a80403
    ↪ docker ps                                                                                                                                                                  00:53:08
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                               NAMES
    cc395e45faa5        mysql:8             "docker-entrypoint.s…"   3 seconds ago       Up 2 seconds        0.0.0.0:32773->3306/tcp, 0.0.0.0:32772->33060/tcp   some-mysql
    

    创建数据库和用户

    CREATE DATABASE devops;
    CREATE USER 'logesh' IDENTIFIED BY 'logesh';
    GRANT ALL ON devops.* TO 'logesh';
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.stackoverflow</groupId>
        <artifactId>q53692999</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>q53692999</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    配置属性

    spring.datasource.url=jdbc:mysql://localhost:32773/devops
    spring.datasource.username=logesh
    spring.datasource.password=logesh
    

    运行应用程序:

         .   ____          _            __ _ _
        /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
       ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
        \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
         '  |____| .__|_| |_|_| |_\__, | / / / /
        =========|_|==============|___/=/_/_/_/
        :: Spring Boot ::        (v2.1.1.RELEASE)
    
       2018-12-17 00:51:56.267  INFO 16686 --- [           main] com.stackoverflow.q53692999.Main         : Starting Main on apadana with PID 16686 (~/Documents/projects/q53692999/target/classes started by foo in ~/Documents/projects/q53692999)
       2018-12-17 00:51:56.269  INFO 16686 --- [           main] com.stackoverflow.q53692999.Main         : No active profile set, falling back to default profiles: default
       2018-12-17 00:51:56.553  INFO 16686 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
       2018-12-17 00:51:56.568  INFO 16686 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 11ms. Found 0 repository interfaces.
       2018-12-17 00:51:56.777  INFO 16686 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
       2018-12-17 00:51:56.965  INFO 16686 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
       2018-12-17 00:51:56.994  INFO 16686 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
        name: default
        ...]
       2018-12-17 00:51:57.022  INFO 16686 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.7.Final}
       2018-12-17 00:51:57.023  INFO 16686 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
       2018-12-17 00:51:57.084  INFO 16686 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
       2018-12-17 00:51:57.142  INFO 16686 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
       2018-12-17 00:51:57.444  INFO 16686 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
       2018-12-17 00:51:57.526  INFO 16686 --- [           main] com.stackoverflow.q53692999.Main         : Started Main in 1.446 seconds (JVM running for 1.746)
       2018-12-17 00:51:57.529  INFO 16686 --- [       Thread-5] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
       2018-12-17 00:51:57.531  INFO 16686 --- [       Thread-5] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
       2018-12-17 00:51:57.534  INFO 16686 --- [       Thread-5] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
    
       Process finished with exit code 0
    

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 2013-04-21
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      相关资源
      最近更新 更多