关于Spring框架的 @Configuration 与@Service 加载顺序哪个先后(某些环境加载是随机的)

很多资料都说@Configuration 优先加载,@Service后加载,如下图:

 

本来也是以为 @Configuration 优先加载于  @Service ,那参数处理放在@Configuration注入完后,@service构建时就可以拿来用的,在我在IDEA的调试时下断点验证过。但在正式环境跑项目时并不是这样的。

先看原代码:

  带@Configuration注解的配置参数代码如下:

@Configuration
public class SysParamApi {/*** 是否调试模式*/public static boolean is_debug=true;@Value("${sys-param.sys.is_debug}")public  void setIs_debug(String is_debug) {SysParamApi.is_debug = "Y".equals(is_debug);System.out.println("是否调试模式:"+SysParamApi.is_debug);}}

带@Service业务类,有两个地方在使用这个参数。上面的@Configuration参数,代码如下:

@Service
public class PushStatusServiceImpl {private static final Logger logger = LogManager.getLogger(PushStatusServiceImpl.class);//调试时设置falseboolean isRun=true;@PostConstructpublic void init() {int cpuCount = Runtime.getRuntime().availableProcessors();System.out.println("start RedisStatusProcess > cpus=" + cpuCount);if(!SysParamApi.is_debug) {//业务处理logger.info("=========================== start rev pole status -> "+isRun);processOrderImport();}else{logger.info("xxxxxxxxxxxxxxxxxx start rev status -> Fail");}}
}@Service
public class PushOrderServiceImpl {private static final Logger logger = LogManager.getLogger(PushOrderServiceImpl.class);@PostConstructpublic void init() {int cpuCount = Runtime.getRuntime().availableProcessors();System.out.println("start RedisOrderProcess > cpus=" + cpuCount);//调试时设置falseif(!SysParamApi.is_debug){logger.info("=========================== start rev order -> "+isRun);processOrderImport(cpuCount);}else{logger.info("xxxxxxxxxxxxxxxxxx start rev order -> Fail");}}boolean isRun=true;
}

上面的代码在IDEA调试器执行时,确实是加载 @Configuration 执行打印是否调试模式这行 后加载@Service并执行init()方法,此时拿到SysParamApi.is_debug值 是注入后的值 。这也是大家认可。

在正式服务器发布后就翻车了,在不改上面任何代码及配置的情况下,执行的效果是:

第一次执行时:

发现先加载执行 @Service  ->  @Service ->   @Configuration

第二次执行时:

发现先加载执行@Service  -> @Configuration  -> @Service 

由于是正式服务器不能尝试多次,上面两次验证加载是随机的。

解决加载参数需要用到@PostConstruct注解,再修改代码如下:

@Service
public class PushOrderServiceImpl {private static final Logger logger = LogManager.getLogger(PushOrderServiceImpl.class);@Value("${sys-param.sys.is_debug}")public  void setIs_debug(String is_debug) {SysParamApi.is_debug = "Y".equals(is_debug);System.out.println("是否调试模式:"+SysParamApi.is_debug);}@PostConstructpublic void init() {int cpuCount = Runtime.getRuntime().availableProcessors();System.out.println("start RedisOrderProcess > cpus=" + cpuCount);//调试时设置falseif(!SysParamApi.is_debug){logger.info("=========================== start rev order -> "+isRun);processOrderImport(cpuCount);}else{logger.info("xxxxxxxxxxxxxxxxxx start rev order -> Fail");}}boolean isRun=true;
}

说明:@PostConstruct注解的作用是本类加载完所有的参数(包含了流入参数),再执行。

生产环境测试验证:

上面测试生产环境参数:

操作系统:CentOS Linux release 8.1.1911 

jdk环境:

openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)


 

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

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

相关文章

喜讯 | 经纬恒润整车电子电气测试实验室通过一汽研发总院外部实验室资质认证!

近日,经纬恒润整车电子电气测试实验室成功通过中国一汽研发总院的资质评定,获得外部实验室认可证书。这是继经纬恒润测试实验室获得一汽智能网联开发院车载以太网测试资质认证之后的又一次认可,它将拓宽经纬恒润与红旗新能源及相关零部件供应…

分组密码工作模式

在密码学中,分组密码工作模式可以提供诸如机密性或真实性的信息服务。 基于分组的对称加密算法(DES 、AES等)只是描述如何根据加密密钥对一段固 定长度(块)的数据进行加密,对于比较长的数据,分组…

【Spring Boot 源码学习】BootstrapRegistry 详解

《Spring Boot 源码学习系列》 BootstrapRegistry 详解 一、引言二、往期内容三、主要内容3.1 源码初识3.2 register 方法3.3 registerIfAbsent 方法3.4 isRegistered 方法3.5 getRegisteredInstanceSupplier 方法3.6 addCloseListener 方法3.7 InstanceSupplier 内部接口类3.7…

故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,GRU门控循环单元故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

基于spring boot实现邮箱发送和邮箱验证

目录 一、邮箱发送实现1. 开通邮箱服务2. 添加邮箱依赖3.添加配置4.添加邮箱通用类5. 测试类 二、邮箱验证实现1.添加依赖2. 添加配置3.添加controller4. 测试 项目地址: https://gitee.com/nssnail/springboot-email 一、邮箱发送实现 1. 开通邮箱服务 使用qq邮箱、163邮箱都…

1月无代码资讯 | 两项低代码无代码行业报告相继重磅发布;GitHub Copilot Chat全面开放使用

栏目导读:无代码资讯栏目从全球视角出发,带您了解无代码相关最新资讯。 TOP3 大事件 1、ResearchAndMarkets.com "低代码无代码开发平台市场—— 2018-2028 年全球行业规模、份额、趋势、机遇及预测"报告发布 据雅虎财经近日资讯显示&#xf…

网络层 IP协议(1)

前置知识 主机:配有IP地址,但是不进行路由控制的设备 路由器:既配置了IP地址,又能进行路由控制的设备 节点:主机和路由器的总称 IP协议主要完成的任务就是 地址管理和路由选择 地址管理:使用一套地址体系,将网络设备的地址描述出来 路由选择:一个数据报如何从源地址到目的地址 …

【LVGL源码移植】

LVGL源码移植 ■ LVGL源码移植一:下载LVGL源码二:修改LVGL文件夹1: 将这5个文件,复制到一个新的文件夹2: 简化文件,减少内存消耗(去除不必要的文件)3: 为了规范化,我们将下列文件进行重命名 三&…

git使用方法(简易版)

一、git使用过程 1.注册git账号,并新建一个仓库; http://t.csdnimg.cn/ePcsx可以参考链接 2.在电脑文件夹中,右键选择 Git Bash Here,输入git init(初始化仓库); git init - 初始化仓库。 Git 使用 git …

张维迎《博弈与社会》多重均衡与制度和文化(1)多重均衡问题

什么是多重均衡 我曾经在课堂上做过这样一个实验:随机选择男女两位同学参加一个选数字的游戏。游戏的基本规则为:每一个同学随机地从1到10十个数字中任意选择5个。如果两人选择的数字没有任何重复的话,则每人可以得到50元;如果两人…

Google Gemini Pro 国内版

Google Gemini Pro 国内版:【直达链接】 Google Gemini Pro 国内版 能力分类基准测试描述更高分数更好Gemini UltraGPT-4通用MMLU57个主题(包括STEM、人文等)的问题表示是90.0%86.4%(5-shot, 报告)推理Big-Bench Hard…

微信小程序(二十九)交互提示-界面加载框和提示框

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.showLoading加载框示范 2.showToast提示框示范 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"it…

音视频数字化(音乐CD)

上篇文章【音视频数字化(音频数字化)】我们聊了音频数字化原理,其中谈到了音乐CD,结尾也提到了一个小问题:“CD音质是最高吗?为什么?”不知道大家是怎么理解的。 其实CD质量只是“无损”存储,但是数字化标准只是“44.1kHz,16bit”,因此相对于现在,音质不能说最高。 …

故障诊断 | 一文解决,BP神经网络的故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,BP神经网络的故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

解决:IDEA无法下载源码,Cannot download sources, sources not found for: xxxx

原因 Maven版本太高&#xff0c;遇到http协议的镜像网站会阻塞&#xff0c;要改为使用https协议的镜像网站 解决方案 1.打开设置 2. 拿到settings.xml路径 3. 将步骤2里箭头2的User settings file&#xff1a;settings.xml打开&#xff0c;作以下修改 保存即可。如果还不行…

15. 三数之和(力扣LeetCode)

文章目录 15. 三数之和题目描述双指针去重逻辑的思考a的去重b与c的去重 15. 三数之和 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 …

全志H713红外IR遥控配置方法

篇头 全志H713 Soc是一颗 A53四核心&#xff0c;支持MAX 2GB DDR&#xff0c; 支持1920x1080P LVDS接口&#xff0c; 支持梯形校正功能的芯片&#xff0c;非常适合用于开发投影仪&#xff0c;尤其是低成本的LCD投影。本文详细介绍此平台&#xff0c;配置一个新的红外遥控器的方…

【无刷电机学习】电流采样电路硬件方案

【仅作自学记录&#xff0c;不出于任何商业目的】 目录 AD8210 INA282 INA240 INA199 AD8210 【AD8210数据手册】 在典型应用中&#xff0c;AD8210放大由负载电流通过分流电阻产生的小差分输入电压。AD8210抑制高共模电压(高达65V)&#xff0c;并提供接地参考缓冲输出&…

gtkmm xml ui 例子(from string)

文章目录 前言来看一个从字符串中生成UI的例子 前言 glade生成的xml格式不被gtkmm4支持, 需要作修改 来看一个从字符串中生成UI的例子 #include <gtkmm/application.h> #include <gtkmm.h> #include <iostream> using namespace std;class ExampleWindow :…

51单片机编程应用(C语言):独立按键

目录 1.独立按键介绍 2.独立按键控制LED亮灭 1.1按下时LED亮&#xff0c;松手LED灭&#xff08;按一次执行亮灭&#xff09; 1.2首先按下时无操作&#xff0c;松手时LED亮&#xff08;再按下无操作&#xff0c;所以LED亮&#xff09;&#xff0c;松手LED灭&#xff08;松手时…