Azure Functions Java类生命周期:每次执行是否创建新实例?
Azure Functions Java类生命周期与实例复用说明
- Azure Functions运行时默认会复用函数类的实例,不会每次执行都创建新对象。它会维护一个实例池,根据请求负载调度空闲实例,只有在实例不足时才会新建。
- 绝对不要把
ExecutionContext(包括通过它获取的getLogger()这类上下文专属对象)存在实例变量里:ExecutionContext是单次请求独有的,每个执行的上下文都包含当前请求的专属元数据和资源。- 如果复用实例,后续请求会覆盖实例变量里的旧上下文对象,导致日志错乱、上下文数据错误等问题。
- 正确做法:
- 每次执行时直接用方法参数传入的
ExecutionContext获取日志器或其他上下文信息,不用缓存。 - 要是想复用无状态、线程安全的对象(比如数据库连接池、全局配置实例),可以存在实例变量里,这类对象不依赖单次执行上下文,复用能提升性能。
- 每次执行时直接用方法参数传入的
内容的提问来源于stack exchange,提问作者Black
相关产品推荐
相关产品推荐

