针对Spring Boot的JPA在MySQL 8新增记录失败的问题,可以采取以下步骤进行解决:
问题原因
在MySQL 8的版本中,密码加密方式由以前的mysql_native_password
改成了新的加密方式caching_sha2_password
,由此就导致了Spring Boot的JPA在MySQL 8新增记录失败的问题。
解决方法
- 修改MySQL用户密码加密方式
此方法是修改MySQL用户密码加密方式,使其与Spring Boot的JPA兼容。具体操作如下:
- 登录MySQL,输入以下命令:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '用户密码';
- 其中,root为用户名,%表示所有IP地址均可,也可以替换为具体的IP地址;用户密码为MySQL登录密码。
- 修改完成之后,可以重新启动Spring Boot应用,新增数据应该已经可以正常插入了。
- 配置MySQL连接驱动程序
此方法是在Spring Boot应用中配置MySQL连接驱动程序。具体操作步骤如下:
- 在Spring Boot的Maven配置文件中,添加以下依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
- 在Spring Boot应用的
application.yml
或application.properties
文件中,添加以下配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 用户密码
driver-class-name: com.mysql.cj.jdbc.Driver
- 其中,url中有多个配置参数,其中
useSSL=false
表示不使用SSL加密连接;serverTimezone=UTC
表示使用UTC作为服务器的时区;allowPublicKeyRetrieval=true
表示开启公钥检索的功能;useUnicode=true
和characterEncoding=UTF-8
表示使用UTF-8字符集进行数据传输。 - 配置完成之后,重新启动Spring Boot应用,新增数据应该已经可以正常插入了。
以上两种解决方法,可根据实际情况进行选择和尝试,其中第二种方法更具通用性,在其他情况下也可以采用。接下来提供两条示例:
示例一
如下是一个使用Spring Boot的JPA插入数据库数据的示例:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Integer age;
// getter/setter
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User save() {
User user = new User();
user.setName("sam");
user.setAge(18);
return userRepository.save(user);
}
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
若Spring Boot应用连接的是MySQL 8,则使用以上代码插入数据时会出现无法插入的情况。此时可以通过上述两种方法进行解决。
示例二
如下是一个Spring Boot应用的MySQL参数配置示例,以使用阿里云MySQL为例:
spring:
datasource:
url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 用户密码
driver-class-name: com.mysql.cj.jdbc.Driver
- 其中,xxx.xxx.xxx.xxx为阿里云MySQL的IP地址;其他参数与前面介绍的一致。
- 配置完成之后,启动Spring Boot应用,应该可以正常连接阿里云MySQL并操作数据了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决springboot的JPA在Mysql8新增记录失败的问题 - Python技术站