AWS Lambda-Java静态初始化
在AWS lambda函数(用Java编写)中,我想使用AsyncHttpClient()。 不幸的是,创建此对象的实例大约需要500毫秒。。(但我仍然喜欢它,请不要建议我更改http客户端) 我正在考虑在静态初始化块中创建AsyncHttpClient。因此,AWS可能会执行一次,然后在每次AWS Lambda执行时克隆快照。我说得对吗 在AWS Lambda中何时执行静态块AWS Lambda-Java静态初始化,java,java-8,initialization,aws-lambda,Java,Java 8,Initialization,Aws Lambda,在AWS lambda函数(用Java编写)中,我想使用AsyncHttpClient()。 不幸的是,创建此对象的实例大约需要500毫秒。。(但我仍然喜欢它,请不要建议我更改http客户端) 我正在考虑在静态初始化块中创建AsyncHttpClient。因此,AWS可能会执行一次,然后在每次AWS Lambda执行时克隆快照。我说得对吗 在AWS Lambda中何时执行静态块 在每次AWS Lambda调用中克隆一次快照 或者对每个Lambda执行分别执行静态块(这无助于将Http客户端的创
- 在每次AWS Lambda调用中克隆一次快照
- 或者对每个Lambda执行分别执行静态块(这无助于将Http客户端的创建放在那里)
我建议阅读有关Lambda容器重用的内容。正如
markb
所解释的,没有“快照”这样的东西
AWS在第一次调用Lambda时启动执行上下文,然后在下一次请求中重用它。然而,这并不能保证。AWS可随时关闭此上下文,或创建其他上下文以在负载较重时缩放Lambda
执行上下文由容器、JVM和定义处理程序函数的Java类的单例实例组成
因此,我不建议在静态块中进行任何“一次性”初始化,而是在类的构造函数中进行初始化。这将大大提高代码的可测试性。正如
Mark B
所解释的,没有“快照”这样的东西
AWS在第一次调用Lambda时启动执行上下文,然后在下一次请求中重用它。然而,这并不能保证。AWS可随时关闭此上下文,或创建其他上下文以在负载较重时缩放Lambda
执行上下文由容器、JVM和定义处理程序函数的Java类的单例实例组成
因此,我不建议在静态块中进行任何“一次性”初始化,而是在类的构造函数中进行初始化。这将大大提高代码的可测试性