Reason: No converter found capable of converting from type [java.lang.String] to type [java.lang.Cla

这篇博客讲述了在编程过程中遇到的一个错误——无法从字符串转换为DataSource类。作者检查了配置文件并确认数据库连接池已导入,但问题依然存在。经过仔细排查,发现原来是MySQL和Druid版本不兼容导致的。最终,通过更新到最新版本的数据库驱动和Druid解决了问题,IDEA的提示帮助完成了代码修复。
摘要由CSDN通过智能技术生成

Reason: No converter found capable of converting from type [java.lang.String] to type [java.lang.Class<javax.sql.DataSource>]

Action:

Update your application’s configuration

系统告诉我去查看application配置文件

在这里插入图片描述
发现数据库连接池没导入
在这里插入图片描述
但是查看依赖之后发现已经导入

再仔细查看

还是不知道

后来发现是mysql 与druid版本问题

我的解决办法是都用最新版的数据库驱动和数据库连接池版本

然后根据idea的提示吧代码写出来

idea都提示了,肯定是没问题的

根据报错信息,可以看出问题出在将拦截器类注册为 Bean 后,将其添加到 MyBatis 的拦截器列表中时出现了类型转换问题。具体来说,Spring Framework 将拦截器类的类名作为字符串添加到了 `mybatis.configuration.interceptors[0]` 属性中,而 MyBatis 在读取该属性时期望得到 `org.apache.ibatis.plugin.Interceptor` 类型的对象。 解决这个问题的方法是,将拦截器类的实例注入到 `SqlSessionFactory` 中,在创建 `SqlSessionFactory` 时将其添加到 MyBatis 的拦截器列表中。具体的代码如下: ```java @Configuration public class MyBatisConfig { @Autowired private SqlStatsInterceptor sqlStatsInterceptor; @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); // 注册拦截器 Interceptor[] interceptors = { sqlStatsInterceptor }; sessionFactory.setPlugins(interceptors); return sessionFactory.getObject(); } } ``` 在这段代码中,我们将 `SqlStatsInterceptor` 类的实例 `sqlStatsInterceptor` 注入到 `MyBatisConfig` 配置类中,并在创建 `SqlSessionFactory` 时将其添加到 MyBatis 的拦截器列表中。 注意,我们使用了 `SqlSessionFactoryBean` 类而不是 `SqlSessionFactory` 类来创建 `SqlSessionFactory` 。这是因为 `SqlSessionFactoryBean` 类可以方便地支持 Spring Framework 的自动配置和依赖注入机制,而 `SqlSessionFactory` 类则不支持。 另外,如果你的应用程序使用的是 MyBatis 3.5.0 及以上版本,你也可以使用 MyBatis 提供的 `@Interceptors` 注解来将拦截器类注册到 MyBatis 中,这样就可以避免使用 `SqlSessionFactory` 和 `SqlSessionFactoryBean` 。具体的代码如下: ```java @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) @Component public class SqlStatsInterceptor implements Interceptor { // 拦截器逻辑代码 } @Configuration public class MyBatisConfig { @Autowired private SqlStatsInterceptor sqlStatsInterceptor; @Bean public Configuration mybatisConfig() { Configuration config = new Configuration(); // 注册拦截器 config.addInterceptor(sqlStatsInterceptor); return config; } } ``` 在这段代码中,我们使用了 `Configuration` 类来创建 MyBatis 的配置对象,并使用 `addInterceptor` 方法将拦截器类的实例 `sqlStatsInterceptor` 添加到 MyBatis 的拦截器列表中。这样,当 MyBatis 创建 `SqlSession` 时,就会自动应用该拦截器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值