如何获取Java Managed Bean的初始化时间及与JVM启动时间差值?
获取Java Managed Bean初始化时间的方案
没有标准API可以直接获取Managed Bean的初始化时间,但可以借助容器的生命周期回调机制实现需求,同时轻松计算与JVM启动时间的差值。
Spring 框架场景
方式一:实现InitializingBean接口
import org.springframework.beans.factory.InitializingBean; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; public class MySpringBean implements InitializingBean { @Override public void afterPropertiesSet() { long beanInitTime = System.currentTimeMillis(); RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); long jvmStartTime = runtimeMXBean.getStartTime(); long delay = beanInitTime - jvmStartTime; // 可输出或存储delay值,即JVM启动到Bean初始化的耗时 } }
方式二:使用@PostConstruct注解
import jakarta.annotation.PostConstruct; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; public class MySpringBean { @PostConstruct public void init() { long beanInitTime = System.currentTimeMillis(); RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); long jvmStartTime = runtimeMXBean.getStartTime(); long delay = beanInitTime - jvmStartTime; } }
Jakarta EE(原Java EE)场景
使用@PostConstruct注解监听Bean初始化:
import jakarta.annotation.PostConstruct; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; public class MyEJB { @PostConstruct public void onInit() { long beanInitTime = System.currentTimeMillis(); RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); long jvmStartTime = runtimeMXBean.getStartTime(); long delay = beanInitTime - jvmStartTime; } }
核心逻辑说明
- 获取JVM启动时间:通过
RuntimeMXBean.getStartTime()得到JVM启动时的毫秒时间戳 - 记录Bean初始化时间:在容器触发的初始化回调方法中调用
System.currentTimeMillis() - 计算差值:直接用Bean初始化时间戳减去JVM启动时间戳,结果就是两者的时间差(毫秒)
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

