美文网首页
数据源(dataSource)懒加载问题追踪

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

作者: 夏天在微笑 | 来源:发表于2020-04-04 13:30 被阅读0次

问题描述:

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

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

    链接日志:

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

来自 https://github.com/alibaba/druid/issues/2178

小问号的许多朋友来了:

    为啥其他应用都正常呢?

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

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

相关文章

网友评论

      本文标题:数据源(dataSource)懒加载问题追踪

      本文链接:https://www.haomeiwen.com/subject/mbdplttx.html