at com.baomidou.dynamic.datasource.DynamicDataSourceCreator.createDruidDataSource
时间: 2023-11-26 16:03:35 浏览: 24
`com.baomidou.dynamic.datasource.DynamicDataSourceCreator.createDruidDataSource`是dynamic-datasource-spring-boot-starter中创建Druid数据源的方法,可能会出现以下错误:
1. 数据库连接信息配置错误,可以检查`application.yml`或`application.properties`中的数据库连接信息是否正确。
2. 缺少Druid依赖,可以在`pom.xml`中添加以下依赖:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>{latest-version}</version>
</dependency>
```
3. 数据库版本不兼容,可以升级或降级数据库版本,或者选择适合当前数据库版本的Druid版本。
4. 数据库连接池初始化失败,可以检查数据库连接池的配置是否正确,例如连接池大小、最大连接数等。
如果以上方法都不能解决问题,可以查看具体的错误信息,根据错误信息进行排查。
相关问题
dynamic-datasource-spring-boot-starter不让它去加载com.baomidou.dynamic.datasource.DynamicDataSourceCreator.createDruidDataSource
如果你在使用`dynamic-datasource-spring-boot-starter`时,不想让它去加载`com.baomidou.dynamic.datasource.DynamicDataSourceCreator.createDruidDataSource`方法,可以按照以下步骤进行操作:
1. 排除`dynamic-datasource-spring-boot-starter`中对Druid的依赖,例如:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
```
2. 添加Druid的依赖,例如:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
```
3. 在`application.yml`或`application.properties`中配置Druid数据源信息,例如:
```yaml
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
```
这样就可以使用Druid数据源,并且不会加载`com.baomidou.dynamic.datasource.DynamicDataSourceCreator.createDruidDataSource`方法。
注意:如果你采用以上方法排除了`dynamic-datasource-spring-boot-starter`中的Druid依赖,那么一些动态数据源的配置和功能可能会受到影响。如果需要使用动态数据源,可以采用其他方法解决问题,例如配置Druid数据源的时候指定`stat-view-servlet`和`stat-filter`等配置项。
com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource
com.baomidou.dynamic.datasource.ds.AbstractRoutingDataSource是一个抽象类,继承自javax.sql.DataSource接口和org.springframework.beans.factory.InitializingBean接口。它的主要作用是实现动态数据源的切换,具体实现类为com.baomidou.dynamic.datasource.DynamicRoutingDataSource。
在使用mybatis-plus时,我们可以通过继承AbstractRoutingDataSource并实现determineCurrentLookupKey()方法来实现动态数据源的切换。该方法返回一个字符串,表示当前使用的数据源名称。具体实现可以根据业务需求来定制。
在DynamicRoutingDataSource中,我们可以看到它继承了AbstractRoutingDataSource,并实现了determineDataSource()方法。该方法通过调用DynamicDataSourceContextHolder获取当前线程中存储的数据源名称,然后从dataSourceMap中获取对应的数据源。如果没有获取到,则使用默认的primary数据源。
示例代码如下:
```java
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DynamicDataSourceContextHolder.getDataSource();
}
}
public class DynamicDataSourceContextHolder {
private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
public static void setDataSource(String dataSource) {
CONTEXT_HOLDER.set(dataSource);
}
public static String getDataSource() {
return CONTEXT_HOLDER.get();
}
public static void clearDataSource() {
CONTEXT_HOLDER.remove();
}
}
public class DynamicDataSourceAspect {
@Before("@annotation(ds)")
public void switchDataSource(JoinPoint point, TargetDataSource ds) {
String dataSourceName = ds.value();
DynamicDataSourceContextHolder.setDataSource(dataSourceName);
}
@After("@annotation(ds)")
public void restoreDataSource(JoinPoint point, TargetDataSource ds) {
DynamicDataSourceContextHolder.clearDataSource(); }
}
```