You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS如何在启动时创建类的唯一静态单实例且禁止重建

实现方案:NestJS 全局持久化单例实例

NestJS 中所有默认注册的 Provider 天生就是应用级单例,只要服务不重启,实例只会初始化一次,不会被重建,属性会全程保留,刚好匹配你的需求。

具体实现步骤

  • 第一步:定义你的业务类,声明需要的静态/实例属性、业务逻辑
// persistent.service.ts
export class PersistentService {
  // 自定义静态属性
  static globalStaticConfig = {
    baseUrl: 'https://example.com',
    version: '1.0.0'
  };
  // 实例持久化属性,服务运行期间修改后的值会全程保留
  instanceRuntimeData: Record<string, any> = {};

  // 构造函数只会在实例第一次创建时执行一次,可放初始化逻辑
  constructor() {
    console.log('持久化实例初始化,服务运行全程仅执行一次');
  }

  // 自定义业务方法
  setRuntimeData(key: string, value: any) {
    this.instanceRuntimeData[key] = value;
  }

  getRuntimeData(key: string) {
    return this.instanceRuntimeData[key];
  }
}
  • 第二步:在根模块(通常是AppModule)中注册该服务为全局Provider
// app.module.ts
import { Module } from '@nestjs/common';
import { PersistentService } from './persistent.service';

@Module({
  providers: [PersistentService],
  exports: [PersistentService], // 导出后所有其他模块都可以注入使用该实例
})
export class AppModule {}
  • 第三步:在任意业务位置通过依赖注入调用,所有位置拿到的都是同一个实例
// 任意controller/service中使用示例
import { Injectable } from '@nestjs/common';
import { PersistentService } from './persistent.service';

@Injectable()
export class UserService {
  // 注入的是全局唯一的持久化实例
  constructor(private readonly persistentService: PersistentService) {}

  demoOperate() {
    // 修改实例属性,所有引用该实例的位置都会拿到更新后的值
    this.persistentService.setRuntimeData('activeUserCount', 120);
    // 调用静态属性,全局共享
    console.log(PersistentService.globalStaticConfig.version);
  }
}

额外注意事项

  • 如果你需要确保实例在应用启动时就立即初始化,不需要等被其他模块注入才创建,可以调整Provider注册配置,增加eager: true参数:
// app.module.ts 调整providers配置
@Module({
  providers: [
    {
      provide: PersistentService,
      useClass: PersistentService,
      eager: true, // 应用启动阶段就完成实例初始化
    }
  ],
  exports: [PersistentService]
})
  • 禁止手动通过new PersistentService()创建实例,必须通过Nest依赖注入获取,才能保证拿到的是全局唯一的单例。
  • 以上是服务运行时的内存级属性持久化,如果需要跨服务重启还保留属性值,需要额外对接数据库、Redis等持久化存储介质做数据落地。

内容的提问来源于stack exchange,提问作者valerius21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:15:03