通过Environment获取属性文件的值,竟然会调用到JNDI服务!!!| 京东云技术团队
💡
原文中文,约5300字,阅读约需13分钟。
📝
内容提要
某应用在压测过程中CPU使用率超过80%,通过在线诊断工具发现频繁调用environment.getProperty()获取属性值,内部调用了JndiPropertySource.getProperty()。通过属性缓存和避免使用JNDI服务获取属性值,性能提升63%。JNDI是Java的命名和目录服务接口,用于管理和配置资源,但复杂且依赖环境。现代替代方案如Spring和Micronaut提供更简单灵活的资源管理方式。避免使用JNDI可通过配置、环境变量或在线诊断工具实现。
🎯
关键要点
- 某应用在压测过程中CPU使用率超过80%。
- 频繁调用environment.getProperty()获取属性值,内部调用了JndiPropertySource.getProperty()。
- 通过属性缓存和避免使用JNDI服务获取属性值,性能提升63%。
- JNDI是Java的命名和目录服务接口,用于管理和配置资源,但复杂且依赖环境。
- 现代替代方案如Spring和Micronaut提供更简单灵活的资源管理方式。
- 避免使用JNDI可通过配置、环境变量或在线诊断工具实现。
- JNDI的主要用途包括资源管理、远程对象查找和目录服务。
- 使用JNDI的复杂性和环境依赖性使得现代应用倾向于选择更简单的替代方案。
- Spring Boot中PropertySource的优先级影响属性的获取顺序。
- 可以通过java_opts环境变量添加配置来避免使用JNDI。
- 建议使用Forcebot平台进行压测和在线诊断,以优化性能。
➡️