SpringBoot:Failed to obtain JDBC Connection解决方案

292 阅读3分钟

在第一次给自己的SpringBoot链接mysql的时候会出现很多问题

可能的问题和解决方案

本地的mysql没办法用root登陆

这个一般是因为mysql在初始的时候默认root角色不能用密码登陆的原因 可以用

sudo mysql

先用最高权限进入mysql然后查看一下root的信息

SELECT User, Host, plugin FROM mysql.user;

如果输出

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | auth_socket |
+------+-----------+-------------+

plugin 是 auth_socket,可以通过以下命令将其更改为使用密码认证:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';

然后刷新一下权限

FLUSH PRIVILEGES;

退出

exit

再重新尝试用密码登陆

mysql -u root -p

应该就可以了

mysql链接的上idea但是链接不上项目

项目文件格式

先检查一下自己的项目文件中是否缺少了什么必要的文件

.
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── tutoring
│   │   │           ├── auth
│   │   │           │   ├── controller
│   │   │           │   ├── mapper
│   │   │           │   │   └── UserMapper.java
│   │   │           │   └── service
│   │   │           │       └── UserService.java
│   │   │           └── demo
│   │   │               ├── controller
│   │   │               │   └── HelloController.java
│   │   │               ├── entity
│   │   │               │   └── Users.java
│   │   │               └── TutoringSystemApplication.java
│   │   └── resources
│   │       ├── application.yml
│   │       ├── mapper
│   │       │   └── UserMapper.xml
│   │       ├── static
│   │       └── templates
│   └── test
│       ├── java
│       │   └── UserTest.java
│       └── resources
│           └── application.yml
└── target
    ├── classes
    │   ├── application.yml
    │   ├── com
    │   │   └── tutoring
    │   │       ├── auth
    │   │       │   ├── mapper
    │   │       │   │   └── UserMapper.class
    │   │       │   └── service
    │   │       │       └── UserService.class
    │   │       └── demo
    │   │           ├── controller
    │   │           │   └── HelloController.class
    │   │           ├── entity
    │   │           │   └── Users.class
    │   │           └── TutoringSystemApplication.class
    │   └── mapper
    │       └── UserMapper.xml
    ├── generated-sources
    │   └── annotations
    ├── generated-test-sources
    │   └── test-annotations
    ├── maven-archiver
    │   └── pom.properties
    ├── maven-status
    │   └── maven-compiler-plugin
    │       ├── compile
    │       │   └── default-compile
    │       │       ├── createdFiles.lst
    │       │       └── inputFiles.lst
    │       └── testCompile
    │           └── default-testCompile
    │               ├── createdFiles.lst
    │               └── inputFiles.lst
    ├── StudentTutoringPlatform-1.0-SNAPSHOT.jar
    ├── StudentTutoringPlatform-1.0-SNAPSHOT.jar.original
    ├── surefire-reports
    │   ├── TEST-UserTest.xml
    │   └── UserTest.txt
    └── test-classes
        ├── application.yml
        └── UserTest.class

这个是我自己的项目tree可以作为参考,一般我们会在test里面测试数据库的连接,test里面的resource文件一定要有配置文件application.yml,可以根据你自己想要测试的内容写进去也可以直接复制总项目的application.yml粘贴过去

test的application.yml的格式问题

  • 记得一定要检查自己的yml格式,如果password的密码忘记加双引号最好加上,这可以避免后面出现的错误。
  • 记得一定要检查自己的yml里的url时区是否配置是准确的,这个会直接影响到数据库的连接,要看自己的mysql数据库中的时区是否匹配的上。
  • 如果不确定的话直接把url里面的时区删去就好了,一般不会出现什么问题。
  • 检查yml里的mybatis的配置
mybatis:
  mapper-locations: classpath:mapper/*.xml   # MyBatis的Mapper XML文件位置
  type-aliases-package: com.tutoring.demo.entity  # 实体类所在的包

记得要配置完整并且准确文件位置

启动文件的问题

启动文件Application.java文件中,确定能够扫描到项目中所需要的文件

@SpringBootApplication(scanBasePackages = {"com.tutoring.auth", "com.tutoring.demo"})

也要能够扫描到需要使用的mapper文件

@MapperScan("com.tutoring.auth.mapper")

注意:这里的@MapperScan的效果和@Mapper的效果是差不多的,只是前者更加适合mapper文件比较多的情况,而且不容易扫描漏,@Mapper可能会让项目扫描不到

Test文件的问题

该有的注释不能缺少

@RunWith(SpringRunner.class)    // 测试需要 Spring 上下文的支持的时候可以用
@SpringBootTest(classes = TutoringSystemApplication.class)
@ContextConfiguration(locations = {"classpath:mapper/*.xml"})

当这些都没有问题的时候

尝试用docker来启动mysql,记得把本地的mysql删除干净了。 docker启动的mysql环境干净不容易受到其他环境的因素影响可以避免很多问题。

先编写一个docker-compose.yml文件

version: "3"

services:
  mysql:
    image: mysql:8.0.39
    container_name: mysql8
    environment:
      - MYSQL_ROOT_PASSWORD=13528815361z
      - TZ=Asiz/Shanghai
    ports:
      - "3306:3306"
    restart: on-failure

记得下好docker,和docker-compose,具体的下载这里就不赘述了

找到刚刚的文件所在的文件

打开终端进入到刚刚文件所在的地方

docker-compose up -d

如果发现镜像拉失败了可以在CSDN上搜索目前可以用的镜像源进行配置就好了。 启动后可以用

docker ps

来查看现在正在运行的容器,这样就启动好了,最后把这个数据库配置到项目中就可以了 如果还有什么问题欢迎在底下评论区评论喔!