使用@Async 更好地扩展 Spring 应用程序以进行大量数据库插入或更新查询
Better scaling Spring application using @Async for large number of database insert or update queries
我有一个 spring REST 控制器,其唯一目的是在每次移动客户端启动或启动应用程序时创建或更新记录。此 URL 仅在用户启动应用程序或恢复后进入前台时才会触发(即,当用户将设备主页按钮按到其他位置并过一会儿后,用户按应用程序图标将其带到前台来自记忆)。
此 URL 的预期请求数约为每分钟 600 个请求。
要扩展此应用程序,最好将 spring 控制器的数据库 (MySql) 创建/更新逻辑放在单独的线程中,还是使用 Spring 的 @Async 功能更好?
这样它就不会长时间占用系统端口,并且在我的网络服务器 ( glassfish ) 将请求推送到等待队列之前,一台机器可以处理大量请求。
此外,
此 table 中的预期 table 大小或记录数约为 10M - 30M。
我个人不会打扰异步调用,至少一开始是这样。创建一个 jmeter 脚本并对其加载一些负载,然后查看它的执行情况。
如果你开始变慢,使用 Async 和它背后的 threadPoolExecutor(你可以轻松配置)当然是一个有效的选择。使用这些类型的东西来配置队列大小和线程数(对于您的线程池执行程序和您的 Web 容器)是一种黑色艺术,这就是像 jmeter 和像 Yourkit 这样的良好分析工具发挥作用的地方.
我有一个 spring REST 控制器,其唯一目的是在每次移动客户端启动或启动应用程序时创建或更新记录。此 URL 仅在用户启动应用程序或恢复后进入前台时才会触发(即,当用户将设备主页按钮按到其他位置并过一会儿后,用户按应用程序图标将其带到前台来自记忆)。
此 URL 的预期请求数约为每分钟 600 个请求。
要扩展此应用程序,最好将 spring 控制器的数据库 (MySql) 创建/更新逻辑放在单独的线程中,还是使用 Spring 的 @Async 功能更好? 这样它就不会长时间占用系统端口,并且在我的网络服务器 ( glassfish ) 将请求推送到等待队列之前,一台机器可以处理大量请求。
此外, 此 table 中的预期 table 大小或记录数约为 10M - 30M。
我个人不会打扰异步调用,至少一开始是这样。创建一个 jmeter 脚本并对其加载一些负载,然后查看它的执行情况。
如果你开始变慢,使用 Async 和它背后的 threadPoolExecutor(你可以轻松配置)当然是一个有效的选择。使用这些类型的东西来配置队列大小和线程数(对于您的线程池执行程序和您的 Web 容器)是一种黑色艺术,这就是像 jmeter 和像 Yourkit 这样的良好分析工具发挥作用的地方.