【Spring】lazy-init(懒加载)的作用

<bean id = "userInfo" class="com.jd.vo.UserInfo" lazy-init="true">

1、lazy-init 默认是false,即非懒加载,意味着当IoC容器创建时,直接创建对象。

2、lazy-init 为true时,即懒加载,意味着IoC容器创建时,不会直接创建对象,只有在调用getBean()方法时,才会创建对象 (并调用其构造方法)。

### 配置 ShardingSphere-JDBC-Core-Spring-Boot-Starter 5.1.2 的元数据懒加载以优化服务启动速度 ShardingSphere 是一款功能强大的分布式数据库解决方案,其核心模块之一 `shardingsphere-jdbc-core-spring-boot-starter` 提供了便捷的 Spring Boot 整合方式。为了优化服务启动速度,可以通过配置 **元数据懒加载** 功能减少初次启动时的资源消耗。 #### 1. 添加依赖 首先,在项目的 `pom.xml` 文件中添加如下依赖项: ```xml <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.1.2</version> </dependency> ``` #### 2. 开启元数据懒加载Spring Boot 的配置文件(通常是 `application.yml` 或 `application.properties`)中,通过设置属性来启用元数据懒加载功能。以下是具体的配置示例: ##### YAML 格式配置 ```yaml spring: shardingsphere: props: sql-show: true # 可选:显示执行的SQL语句,方便调试 metadata-lazy-init: true # 关键配置:开启元数据懒加载 ``` ##### Properties 格式配置 ```properties spring.shardingsphere.props.sql-show=true # 可选:显示执行的SQL语句,方便调试 spring.shardingsphere.props.metadata-lazy-init=true # 关键配置:开启元数据懒加载 ``` 该配置的核心在于 `metadata-lazy-init=true` 属性[^4]。它指示 ShardingSphere 延迟初始化元数据,直到实际需要时才进行解析和加载操作,从而避免在服务启动阶段一次性加载所有元数据带来的性能开销。 #### 3. 理解元数据懒加载的工作原理 ShardingSphere 的元数据主要包括表结构、索引信息以及其他与数据库相关的静态描述性数据。默认情况下,这些元数据会在应用启动时全部加载到内存中。然而,这种策略可能不适合大型复杂的应用场景,因为过多的元数据加载会显著增加启动时间。 通过启用元数据懒加载功能,ShardingSphere 将仅在首次访问某个特定逻辑表或物理表时才会触发对应的元数据加载过程。这种方式不仅降低了初始启动成本,还提高了系统的灵活性和可扩展性[^5]。 #### 4. 测试与验证 完成上述配置后,重新部署并启动应用程序,观察启动时间和日志输出的变化。如果一切正常,您应该能够看到以下现象: - 启动时间明显缩短; - 初次访问某些业务接口时可能出现短暂延迟(这是由于此时正在按需加载相关元数据所致)。 此外,还可以借助一些性能监控工具(如 Arthas、VisualVM 等)进一步分析和比较优化前后的情况。 --- ### 示例代码展示 下面是一个简单的 Java 类用于模拟测试元数据懒加载效果: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @Service public class LazyMetadataTestService { @Autowired private JdbcTemplate jdbcTemplate; public String testLazyLoading() { try { // 执行一条简单查询,触发元数据加载 return jdbcTemplate.queryForObject("SELECT NOW()", String.class); } catch (Exception e) { return "Error occurred during query execution."; } } } ``` 调用 `testLazyLoading()` 方法即可验证元数据懒加载的实际工作情况。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值