我在application.yml之外,还加了个application-druid.yml,数据源配置写在application-druid.yml里。现在帮我看看应该怎么改
时间: 2025-06-21 18:56:14 浏览: 5
### 解决方案
在若依框架中将Spring Boot从2.1.1升级到2.7.12后,出现`DataSource name not set`错误的主要原因是Quartz配置中的数据源名称未正确设置或数据源分离导致的配置问题。以下是详细的解决方案:
#### 1. 检查并调整`application-druid.yml`文件
确保`application-druid.yml`文件中包含正确的数据源配置,并且Quartz的`DataSource`名称与实际数据源名称一致。以下是一个示例配置[^2]:
```yaml
spring:
datasource:
dynamic:
primary: master
strict: false
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
slave:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ruoyi_slave?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
```
注意:
- `dynamic.datasource.master`和`dynamic.datasource.slave`分别定义了主从数据源。
- 确保Quartz的`DataSource`名称与其中一个数据源名称匹配。
#### 2. 配置Quartz数据源
在`application-druid.yml`中添加Quartz的`DataSource`配置[^2]:
```yaml
spring:
quartz:
job-store-type: jdbc
properties:
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource: master
org.quartz.jobStore.tablePrefix: QRTZ_
org.quartz.jobStore.isClustered: true
org.quartz.jobStore.clusterCheckinInterval: 20000
org.quartz.dataSource.master.jndiURL: java:jboss/datasources/MasterDS
```
注意:
- `org.quartz.jobStore.dataSource`必须设置为`master`或其他已定义的数据源名称。
- 如果使用JNDI数据源,确保`jndiURL`正确配置。
#### 3. 引入必要的依赖
确保项目中引入了以下依赖[^2]:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
```
#### 4. 自定义数据源池元数据提供者
如果项目使用了Sharding-JDBC或其他分库分表组件,可能需要自定义数据源池元数据提供者。参考以下代码[^2]:
```java
@Configuration
public class DataSourceHealthConfig {
@Bean
public DataSourcePoolMetadataProvider dataSourcePoolMetadataProvider() {
return dataSource -> dataSource instanceof HikariDataSource
? new HikariDataSourcePoolMetadata((HikariDataSource) dataSource)
: new NotAvailableDataSourcePoolMetadata();
}
private static class NotAvailableDataSourcePoolMetadata implements DataSourcePoolMetadata {
@Override
public Float getUsage() {
return null;
}
@Override
public Integer getActive() {
return null;
}
@Override
public Integer getMax() {
return null;
}
@Override
public Integer getMin() {
return null;
}
@Override
public String getValidationQuery() {
return "SELECT 1";
}
@Override
public Boolean getDefaultAutoCommit() {
return null;
}
}
}
```
#### 5. 排查Springboot自动配置冲突
如果项目中排除了`DataSourceAutoConfiguration`,需要手动配置数据源。检查主入口类是否包含以下注解[^3]:
```java
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
```
如果是,则需手动配置数据源。以下是一个示例:
```java
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ruoyi");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
}
}
```
### 总结
通过检查`application-druid.yml`文件、配置Quartz数据源、引入必要依赖、自定义数据源池元数据提供者以及排查Springboot自动配置冲突,可以有效解决`DataSource name not set`错误。确保所有配置项正确无误,并根据实际情况调整代码和配置文件。
---
阅读全文
相关推荐
















