踩坑:MapperScannerConfigurer导致@PropertySource中@Value无效

news2024/11/26 19:52:46

问题描述

问题描述:在配置类中使用@PropertySource引入了.properties文件,但是使用@Value注入时,结果竟然null。
郁闷了一上午。
在Spring与MyBatis整合时,需要注入MyBatis的自动扫描配置类MapperScannerConfigurer的Bean
我用的是纯注解的方式,所以为了图方便,将DataSource的注入与MapperScannerConfigurer的注入写在了同一个配置类中,像这样:

@Configuration  
@PropertySource("classpath:jdbc.properties")
public class MyBatisConfig{
  
		@Value("${jdbc.url}")  
		private String url;  
		
		@Value(("${jdbc.driver}"))  
		private String driver;  
		
		@Value(("${jdbc.username}"))  
		private String username;  
		
		@Value("${jdbc.password}")  
		private String password;  
		
		
		@Bean  
		public DataSource dataSource() {  
			DruidDataSource ds = new DruidDataSource();  		
			ds.setUrl(url);  
			ds.setDriverClassName(driver);  
			ds.setUsername(username);  
			ds.setPassword(password);  
			return ds;  
		}
		
		@Bean  
		public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource ds) {  
			SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();  
			factoryBean.setDataSource(ds);  
			factoryBean.setTypeAliasesPackage("com.liumingkai.domain");  
			return factoryBean;  
		}  
		
		@Bean  
		public MapperScannerConfigurer mapperScannerConfigurer() {  
			MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();  
			scannerConfigurer.setBasePackage("com.liumingkai.dao");  
			return scannerConfigurer;  
		}
}

以上代码在运行时,利用@Value读取出来的数据是null,就导致无法数据源错误,无法连接数据库。
然后就在数据源身上DEBUG,一上午无济于事,郁闷死了。
然后打算一步一步重新做,看到哪一步是导致@Value无效的,最终发现:当我注入了MapperScannerConfigurer时,会导致@Value的值为null。
依次为突破点,在网上搜索到了这个类似的问题。

解决方案

就是不要将DataSource注入与MapperScannerConfigurer注入写在同一个配置类中。
将DataSource注入的代码写在JdbcConfig.java中,将SqlSessionFactoryBean和MapperScannerConfigurer这两个Bean的注入放在MyBatisConfig.java中
然后问题就解决了。
像这样:

原理分析

MapperScannerConfigurer的初始化要优先于Property属性的读取,由于配置类中使用了@Bean来将MapperScannerConfigurer提供出去,所以此配置类提前初始化,但是此时Property的还没有完成读取配置文件,就导致@Value的值是null。
将DataSource的注入与MapperScannerConfigurer分开后,MapperScannerConfigurer的提前初始化就不会影响到Property的读取,成功设置DataSource

巨人的肩膀

参考的文章

spring+mybatis使用MapperScannerConfigurer引起的PropertyPlaceholderConfigurer无效问题-蒲公英云
遇到的坑之MapperScannerConfigurer执行时机 遇到的坑之MapperScannerConfigure

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/529312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Orillusion]-使用 -windwos-4行命令

前两天看了webgpu的开源库Orillusion | 专业 WebGPU 引擎 Orillusion感觉很不错的样子,准备试一下。因为都是做OpenGL和windows桌面端。 web有点小陌生,记录一下。 准备: Google Chrome Canary 最新版,老版本有问题 nodejs 版…

ChatGPT商业源码授权

ChatGPT商业源码是由OpenAI公司开发并拥有版权的,未经授权擅自使用、复制、分发或修改可能涉及侵犯知识产权等法律问题,并可能会受到相应的法律惩罚。 如果您需要使用ChatGPT商业版,可以考虑通过OpenAI官方渠道进行授权购买。此外&#x…

ENSP网络综合实验(WALN+隧道+NAT)

实验拓扑 https://wwa.lanzoub.com/ivTyH0w8vz6d 设备接入、汇聚交换机(S3700、S5700)、路由器(AR3200)为例。 接入层:用户角色包括员工(接入方式包括有线和无线)和访客(仅能通过无…

深入了解ribbon源码

ribbon源码解析 自动装配 依赖 <!--添加ribbon的依赖--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency>spring-cloud-starter-netflix-…

skywalking agent使用kafka数据传输

安装Zookeeper 下载相应版本的zookeeper 解压文件 tar -vxzf apache-zookeeper-3.8.0-bin.tar.gz进入conf目录下&#xff0c;复制zoo_sample.cfg文件&#xff0c;这个是官方提供的配置样例&#xff0c;我们修改复制的文件名称未zoo.cfg。 进入bin目录&#xff0c;启动zookeep…

医院三级质控信息化支撑工具之一

建立组织,完善管理制度 新华社北京3月23日电 近日&#xff0c;中共中央办公厅、国务院办公厅印发了《关于进一步完善医疗卫生服务体系的意见》&#xff0c;并发出通知&#xff0c;要求各地区各部门结合实际认真贯彻落实。(原文地址:中共中央办公厅 国务院办公厅印发《关于进一步…

【读论文】Seeing Beyond the Brain:MinD-Vis

Seeing Beyond the Brain: Conditional Diffusion Model with Sparse Masked Modeling for Vision Decoding CVPR 2023 基于稀疏掩膜的条件扩散模型视觉解码 背景 了解大脑活动并恢复编码信息是认知神经科学的关键目标&#xff0c;但由于脑信号的复杂潜在表征以及相关数据&a…

Nginx 配置 安全认证 反向代理 HDFS web 页面

Nginx 配置安全认证 反向代理 HDFS web 页面 这样做的目的是&#xff1a;相对安全一些&#xff0c;之前都是直接“裸奔”经常被攻击很讨厌 文章目录 1、下载 NGINX2、解压 NGINX3、编译 NGINX4、编译后&#xff0c;确认 NGINX 安装目录5、配置 NGINX 为系统服务6、安装 密码生…

企业直播时摄像机拍摄参考与取景框裁切参考(组图)

看了《2023中国企业直播应用标准》之后&#xff0c;内容摘要&#xff1a; 企业品质直播标准要素&#xff1a;直播视觉、直播运营、演播厅管理、直播合规以及主播能力。 直播视觉&#xff1a;影响用户的品牌的认知度和好感度直播视觉是直播的第一印象&#xff0c;也是传达企业…

热图 -- pheatmap or ggplot2

文章目录 brief数据准备 pheatmap实例最朴素的方式数据缩放取消聚类更改每个小方格的大小聚类以及聚类方式和参数修改热图呈现的颜色修改legend ggplot2实例ggplot2实例变式添加 group bar做成dotplot pheatmap 多图组合问题 brief 这里主要记录了pheatmap 以及 ggplot2实现热…

shell脚本5数组

文章目录 数组1 数组定义方法2 获取数组长度2.1 读取数组值2.2 数组切片2.3 数组替换2.4 数组删除2.5 追加数组元素 3 实验3.1 冒泡法3.2 直接选择法3.3 反排序法 数组 1 数组定义方法 数组名(value0 valuel value2 …) 数组名( [0]value [1]value [2]value …) 列表名“val…

秒杀的异步优化

在jvm以外的服务&#xff0c;不受jvm内存的限制 不仅仅做数据的存储&#xff0c;还保证了数据的安全&#xff0c;持久化 1.基于List结构模拟消息队列 优点&#xff1a; 利用Redis存储&#xff0c;不受JVM内存限制 基于Redis的持久化机制&#xff0c;数据安全性有保证 可以满…

MQTT搭建笔记

提示&#xff1a;记录mqtt服务搭建及访问教程 文章目录 前言一、MQTT是什么&#xff1f;二、使用步骤1.MQTT服务器搭建2.MQTT集成 总结 前言 一直想了解下mqtt&#xff0c;本人又懒&#xff0c;被动型学习&#xff0c;刚好项目需要&#xff0c;此篇记录下MQTT搭建过程及心得体…

MS5147/MS5148模数转换器可pin对pin兼容ADS1247/ADS1248

‎ADS1246、ADS1247 和 ADS1248 是高度集成的精密 24 位模数转换器 &#xff08;ADC&#xff09;。这些器件具有一个板载、低噪声、可编程增益放大器 &#xff08;PGA&#xff09;、一个带有单周期建立数字滤波器的精密三角积分 &#xff08;ΔΣ&#xff09; ADC 和一个内部振…

【原创】H7-TOOL的CANFD Trace操作说明,不需要目标板额外做任何代码, 支持在线和脱机玩法(2023-05-15)

【原创】H7-TOOL的CANFD Trace操作说明&#xff0c;不需要目标板额外做任何代码, 支持在线和脱机玩法&#xff08;2023-05-15&#xff09; 【当前支持功能】 1、LUA小程序控制&#xff0c;使用灵活。 2、采用SWD接口直接访问目标板芯片的CANFD外设寄存器和CANFD RAM区实现&…

【Linux】自动化构建工具--make/Makefile调试器--gdb的使用

目录 一、自动化构建工具--make/Makefile使用原理项目清理 二、调试器--gdb的使用使用 一、自动化构建工具–make/Makefile 使用 一个工程的源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪…

聊个简单的话题:如何分析性能需求?

目录 前言 需求评估分析 性能测试方案 前言 前几天还在北京出差时候&#xff0c;微信群有个同学问了一个问题&#xff0c;为什么800并发压测&#xff0c;服务器还没有报错&#xff1f;当时群里其他同学提了很多观点&#xff0c;比如&#xff1a; 并发不够&#xff0c;加并…

某医院Pad网络故障分析

分析背景 某医院为了加强信息安全管理&#xff0c;防止病人隐私信息泄露&#xff0c;采用部署“零信任”安全架构设计理念的企业移动安全支撑平台方案。 但在部署前期测试时&#xff0c;遇到了严重的性能问题。 在本次测试环境中&#xff0c;通过PAD访问患者转运业务&#x…

【深入浅出 Yarn 架构与实现】6-4 Container 生命周期源码分析

本文将深入探讨 AM 向 RM 申请并获得 Container 资源后&#xff0c;在 NM 节点上如何启动和清理 Container。将详细分析整个过程的源码实现。 一、Container 生命周期介绍 Container 的启动由 ApplicationMaster 通过调用 RPC 函数 ContainerManagementProtocol#startContain…

SWLLOE

前面讲过了workman&#xff0c;现在我们再了解另外一个swoole&#xff0c;首先我们要了解swoole是个啥&#xff1f;swoole其实是一个面向生产环境的 PHP 异步网络通信引擎&#xff0c;PHP Swoole 作为网络通信框架可以使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix…