简单的springboot项目测试数据源是否连接成功

本文详细介绍了如何在SpringBoot项目中整合MyBatis,包括项目创建、pom.xml配置、yml数据源配置、测试数据库连接等关键步骤。通过具体代码示例,帮助读者快速上手并解决常见问题。

1、创建项目

2、

3、

4、

5、

测试mysql连接数据源,勾选上面两个即可,然后next,完成就创建好了。

6、注意:

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 https://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.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yww</groupId>
    <artifactId>springboot_jh</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_jh</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-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </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>

7、yml配置

代码:我修改了端口8088

server:
  port: 8088
spring:
    datasource:
      username: root
      password: 1234
      url: jdbc:mysql://127.0.0.1:3306/db2019
      driver-class-name: com.mysql.jdbc

8、test包下做测试

代码:

package com.yww.springboot_jh;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;

@SpringBootTest(properties = "workerClassName=A")
class SpringbootJhApplicationTests {
    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws Exception {
        System.out.println("获取的数据库连接为:"+dataSource.getConnection());
    }


}

9、看到如下就是连接成功:

10:附上小姐姐测试时候遇到的错误以及解决办法:

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

 

这个错误一般 1、好好检查yml配置,2、数据源配置时候连接的用户名密码不对

 

检测数据库连接状态是否正常通常可以通过以下几种方式实现。Java 提供了 JDBC(Java Database Connectivity)来与各种数据库进行交互,因此可以基于 JDBC 的 API 实现连接状态的检测逻辑。 ### 方法一:使用 `Connection.isValid()` 方法 Java 7 引入了 `Connection.isValid(int timeout)` 方法,用于检查数据库连接是否有效。此方法允许设置超时时间,避免无限期等待。 ```java import java.sql.Connection; import java.sql.DriverManager; public class DatabaseConnectionChecker { public static boolean checkConnection(String url, String username, String password) { try (Connection connection = DriverManager.getConnection(url, username, password)) { return connection.isValid(5); // 检查连接是否有效,超时时间为5秒 } catch (Exception e) { return false; } } } ``` ### 方法二:执行简单的 SQL 查询 对于一些不支持 `isValid()` 方法的旧版 JDBC 驱动程序,可以通过执行简单的 SQL 查询(如 `SELECT 1`)来验证连接是否正常。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class DatabaseConnectionChecker { public static boolean checkConnectionWithQuery(String url, String username, String password) { try (Connection connection = DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement()) { statement.execute("SELECT 1"); return true; } catch (Exception e) { return false; } } } ``` ### 方法三:使用连接池(如 HikariCP 或 DBCP) 在实际应用中,推荐使用连接池来管理数据库连接连接池通常提供了内置的健康检查机制。例如,HikariCP 提供了配置选项来定义连接的验证查询和验证超时时间。 ```java import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; public class HikariConnectionPool { public static HikariDataSource setupDataSource(String url, String username, String password) { HikariConfig config = new HikariConfig(); config.setJdbcUrl(url); config.setUsername(username); config.setPassword(password); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); return new HikariDataSource(config); } } ``` ### 方法四:自定义健康检查逻辑 对于某些特殊需求,可以结合上述方法编写自定义的健康检查逻辑。例如,可以定期执行健康检查任务,并记录连接状态。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.util.Timer; import java.util.TimerTask; public class HealthCheckTask { private static final String URL = "jdbc:mysql://localhost:3306/testdb"; private static final String USERNAME = "root"; private static final String PASSWORD = "password"; public static void scheduleHealthCheck(int interval) { Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { try (Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD)) { if (connection.isValid(5)) { System.out.println("Database connection is healthy."); } else { System.out.println("Database connection is not healthy."); } } catch (Exception e) { System.out.println("Failed to check database connection."); } } }, 0, interval); } } ``` ### 方法五:使用数据库特定的健康检查机制 某些数据库提供了特定的健康检查机制。例如,MySQL 提供了 `ping` 命令,可以通过 JDBC 驱动程序调用。 ```java import java.sql.Connection; import java.sql.DriverManager; public class MySQLHealthCheck { public static boolean pingMySQLConnection(String url, String username, String password) { try (Connection connection = DriverManager.getConnection(url, username, password)) { // MySQL 的 JDBC 驱动程序提供了 ping 方法 return connection.isWrapperFor(com.mysql.cj.jdbc.Connection.class) && connection.unwrap(com.mysql.cj.jdbc.Connection.class).ping(); } catch (Exception e) { return false; } } } ``` ### 注意事项 1. **超时设置**:在实际应用中,建议设置合理的超时时间,以避免长时间等待导致性能问题。 2. **异常处理**:确保在捕获异常时进行适当的日志记录,以便于后续的故障排查。 3. **数据库驱动程序版本**:不同版本的数据库驱动程序可能支持不同的功能,建议使用最新版本以获得更好的兼容性和性能。 ###
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值