mysql 懒加载数据,数据源(dataSource)懒加载问题追踪

问题描述:

项目启动时,未建立数据库链接,导致第一次请求数据时,需要先建立链接,导致耗时过长。

本地开发时尤为明显,线上估计没知觉。

链接日志:org.mybatis.spring.SqlSessionUtils.getSqlSession(SqlSessionUtils.java:99) - Creating a new SqlSession

com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:721) - {dataSource-1} inited

org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:89) - JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@73cd410] will not be managed by Spring

疑点:

几乎相同配置的其他应用没有这个问题,启动后即可正常访问。

Debug显示数据库链接配置都正常注入。

解决方案:

1、显式调用dataSource.init()方法

2、去掉ConfigurationProperties注解,否则会有rebinder的异常当该DataSource已经初始化一次之后,如果Spring再次触发EnvironmentChangeEvent事件,会导致使用所有标注了@ConfigurationProperties的DruidDataSourceWrapper重新做参数绑定。这个时候,根据spring的规则,会先绑定DruidDataSourceWrapper对象class上标注的@ConfigurationProperties,而这个参数和factory方法上绑定的参数不一致,这时候就会触发DruidDataSource内对已经inited之后修改属性值抛出的UnsupportOperationException

小问号的许多朋友来了:

为啥其他应用都正常呢?

因为基本上启动程序时,就调用了查询语句。

整个数据源初始化的过程是怎么样的呢~ 稍后补充调用流程图。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值