最近在使用springboot时报了个错Failed to bind properties under '' to com.zaxxer.hikari.Hikari DataSource,经过分析和排查,最终将处理办法记录下来,并分享给大家。
问题描述
在使用 Spring Boot 连接 MySQL 或其他数据库时,出现以下错误:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under '' to com.zaxxer.hikari.HikariDataSource:
Property: driverclassname
Value: null
Origin: "driverClassName" from property source "source"
Reason: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalArgumentException: Could not load JDBC driver class [null]
Property: url
Value: null
Origin: "url" from property source "source"
Reason: Property 'url' threw exception; nested exception is java.lang.IllegalArgumentException: url is required.
Property: username
Value: null
Origin: "username" from property source "source"
Reason: Property 'username' threw exception; nested exception is java.lang.IllegalArgumentException: username is required.
Property: password
Value: null
Origin: "password" from property source "source"
Reason: Property 'password' threw exception; nested exception is java.lang.IllegalArgumentException: password is required.
分析原因
在 Spring Boot 中,我们需要在应用程序的配置文件(比如 application.yml 或 application.properties)中指定数据库连接的相关参数,例如 JDBC url、用户名、密码等。这个错误通常是由于配置文件中缺少或者没有指定正确的参数导致的。
解决方案
要解决这个错误,我们需要检查以下几点:
-
检查配置文件中的参数是否正确设置。比如,检查参数名是否拼写正确,数据库 url 是否正确等。
-
检查 Maven 依赖库是否正确加载。在使用 Spring Boot 连接数据库时,我们通常会使用某种 JDBC 驱动器。检查是否在 pom.xml 中正确地指定了 JDBC 驱动器的依赖。
-
如果已经安装了 MySQL/JDBC 驱动器,那么请检查环境变量和 Java 路径等是否正确配置。
下面我给出一段示例代码来说明如何在 Spring Boot 中使用 Hikari 连接池连接 MySQL 数据库。
在 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
然后,在 application.yml 中添加以下配置:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/example
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
minimum-idle: 2
maximum-pool-size: 5
idle-timeout: 10000
pool-name: HikariCP
auto-commit: true
connection-timeout: 30000
connection-test-query: "SELECT 1"
在 Spring Boot 中,我们需要在代码中指定数据库连接池,比如 Hikari 连接池。因此,在 com.example.demo 包下创建一个名为 Config.java 的类,添加以下内容:
@Configuration
public class Config {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource() {
return new HikariDataSource(hikariConfig());
}
}
在这里,我们首先使用 @ConfigurationProperties 注解将 configuration 配置绑定到 Hikari 配置中,然后创建一个 DataSource 集合,将 Hikari 配置传递给其中的 HikariDataSource。DataSource 集合将被注入到 Spring Boot 应用程序中,从而使应用程序可以使用连接池。
此时,您可以在应用程序中使用 JdbcTemplate 与数据库进行交互,例如:
@Autowired
private JdbcTemplate jdbcTemplate;
public void query() {
String sql = "select * from example";
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
// do something with the result
}
如果一切设置正确,那么您现在应该可以正确连接并访问数据库了。
总结
在使用 Spring Boot 连接 MySQL 或其他数据库时,出现“Failed to bind properties under ‘’ to com.zaxxer.hikari.Hikari DataSource”错误可能是由于一些常见问题导致的。我们应该仔细检查配置文件、Maven 依赖库和环境变量是否正确设置,并且在代码中正确地使用数据库连接池。希望本文能够帮助您成功解决这个问题,在以后的开发过程中更加顺畅地使用 Spring Boot。