我一直试图将Spring Boot应用程序连接到MySQL工作台,但未能成功。我的MySQL Workbench(8.0.13版)服务器正在运行,它指示默认的localhost连接位于localhost 3306上。我还在工作台中创建了一个名为TestSchema的数据库。
我已经配置了Spring Boot application.properties以识别此连接,如下所示:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/TestSchema
spring.datasource.username=*****
spring.datasource.password=*****
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.database = MYSQL
据我所知,这是配置应用程序的正确方法。
最后,我在Spring Boot应用程序中使用@Entity批注创建了一个User表。但是,当我运行Spring Boot应用程序时,它给了我这个错误:
java.sql.SQLException: Access denied for user 'dougwb'@'localhost' (using password: YES).
虽然这是我配置的用户名,但是YES不是我在application.properties文件中提供的密码,也不是我的MySQL工作台密码。如何正确配置Spring Boot应用程序以识别MySQL Workbench,并使用User @Entity JPA注释自动填充TestSchema数据库?
答案 0 :(得分:2)
结束聊天讨论。
根据Spring Boot offical document JDBC驱动程序将被自动检测。
spring.datasource.driver-class-name = # Fully qualified name of the JDBC driver. Auto-detected based on the URL by default.
授予MySQL用户特权,并使用mysql_native_password进行默认身份验证。
GRANT ALL PRIVILEGES ON * . * TO 'user_name'@'localhost';
ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY
'user_name';
由于错误而导致的数据源URL更改:java.sql.SQLNonTransientConnectionException:不允许公共密钥检索
如果用户帐户使用sha256_password身份验证,则密码 在传输过程中必须受到保护; TLS是首选机制 为此,但是如果它不可用,则使用RSA公钥加密 将会被使用。要指定服务器的RSA公钥,请使用 ServerRSAPublicKeyFile连接字符串设置或设置 AllowPublicKeyRetrieval = True允许客户端自动 从服务器请求公钥。
spring.datasource.url=jdbc:mysql://localhost:3306/TestSchema?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
AllowPublicKeyRetrieval = True可能允许恶意代理执行 MITM攻击以获取纯文本密码,因此默认情况下为False 并且必须明确启用。