当前位置: 首页 > news >正文

nofollow外链对于网站有提升吗丹东seo优化

nofollow外链对于网站有提升吗,丹东seo优化,有做足球裁判跑动数据的网站吗,龙华建网站多少钱Spring Boot Async 注解深度指南 一、核心使用要点 启用异步支持 必须在启动类或配置类添加 EnableAsync#xff0c;否则异步不生效。 SpringBootApplication EnableAsync public class Application { ... }线程池配置 默认问题#xff1a;Spring 默认使用 SimpleAsyncTaskEx…Spring Boot Async 注解深度指南 一、核心使用要点 启用异步支持 必须在启动类或配置类添加 EnableAsync否则异步不生效。 SpringBootApplication EnableAsync public class Application { ... }线程池配置 默认问题Spring 默认使用 SimpleAsyncTaskExecutor每次新建线程生产环境需自定义线程池。推荐配置通过 ThreadPoolTaskExecutor 定义核心参数核心线程数、队列容量等Configuration EnableAsync public class AsyncConfig implements AsyncConfigurer {Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.setThreadNamePrefix(Async-);executor.initialize(); // 必须初始化return executor;} }方法调用限制 同类调用失效禁止在同一个类中直接调用 Async 方法如 this.asyncMethod()需通过代理对象调用。解决方案将异步方法拆分到独立类中通过依赖注入调用Service public class ServiceA {Autowiredprivate ServiceB serviceB; // 异步方法在 ServiceB 中定义public void callAsync() {serviceB.asyncMethod(); // 通过代理对象调用} }二、常见失效场景及解决方案 方法修饰符错误 限制Async 仅对 public 方法生效private/static/final 方法无效。 事务管理冲突 问题异步方法默认不继承事务上下文Transactional 可能失效。解决方案 在异步方法内部显式管理事务。使用分布式事务框架如 Seata。 异常处理缺失 默认行为异步方法抛出的异常不会传播到调用线程需通过 Future 或 AsyncUncaughtExceptionHandler 捕获。全局异常处理配置Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return (ex, method, params) - log.error(异步方法 {} 异常: {}, method.getName(), ex.getMessage()); }三、进阶注意事项 线程上下文传递 问题异步线程默认不继承主线程的上下文如 MDC 日志跟踪、SecurityContext。解决方案通过 TaskDecorator 装饰任务手动传递上下文executor.setTaskDecorator(task - {MapString, String context MDC.getCopyOfContextMap(); // 获取主线程上下文return () - {MDC.setContextMap(context); // 设置到异步线程task.run();MDC.clear();}; });与定时任务结合 风险在 Scheduled 或 XxlJob 标注的方法上直接使用 Async可能导致调度平台无法感知任务结果。建议仅在任务内部耗时操作中使用异步而非整个方法。 资源释放 线程池关闭Spring 管理的 ThreadPoolTaskExecutor 会在应用关闭时自动调用 shutdown()但需设置等待任务完成executor.setWaitForTasksToCompleteOnShutdown(true); // 等待任务完成 executor.setAwaitTerminationSeconds(60); // 最长等待时间四、实际案例解析 案例 1基础异步调用无返回值 场景执行耗时任务如日志记录、消息推送时不阻塞主线程。 代码实现 Service public class NotificationService {Asyncpublic void sendEmail(String content) {System.out.println(异步发送邮件中线程 Thread.currentThread().getName());// 模拟耗时操作try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }System.out.println(邮件发送完成);} }RestController public class UserController {Autowiredprivate NotificationService notificationService;PostMapping(/register)public String registerUser() {notificationService.sendEmail(欢迎注册); // 异步执行return 注册成功邮件发送中...; // 主线程立即返回} }关键点 方法需标记为 public且类需被 Spring 管理如 Service主线程调用后立即返回任务由 SimpleAsyncTaskExecutor 默认线程池执行。 案例 2带返回值的异步任务 场景异步执行任务并获取结果如批量数据处理。 代码实现 Service public class DataProcessService {Asyncpublic CompletableFutureListString processData(ListString data) {System.out.println(异步处理数据线程 Thread.currentThread().getName());// 模拟耗时处理ListString result data.stream().map(String::toUpperCase).collect(Collectors.toList());return CompletableFuture.completedFuture(result);} }RestController public class DataController {Autowiredprivate DataProcessService dataProcessService;GetMapping(/process)public CompletableFutureString process() {return dataProcessService.processData(Arrays.asList(a, b, c)).thenApply(result - 处理结果 result);} }关键点 返回值需用 CompletableFuture 或 Future 包装调用方通过 thenApply 或 get() 获取结果注意阻塞风险。 案例 3自定义线程池配置 场景优化线程资源避免默认线程池的性能问题。 配置类 注意这里 使用 Bean(‘线程池名称’) 注解 或 实现 AsyncConfigurer 可任选其一 也可都实现 实现AsyncConfigurer 代表将 将spring默认线程池替换为 当前线程池默认线程池存在问题“Spring 默认使用 SimpleAsyncTaskExecutor每次新建线程生产环境需自定义线程池。”使用 Bean() 则需要给当前线程池的指定bean名称在使用 Async(‘线程池名称’)注解时就需要指定线程池的名称了当然这个案例中这里不是必须的当Async不指定线程池名称时则使用的时是默认线程池在这个案例中默认的线程池也就是 ‘customExecutor’。 Configuration EnableAsync public class AsyncConfig implements AsyncConfigurer {Bean(customExecutor)public Executor taskExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.setThreadNamePrefix(Custom-Async-);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor;} }使用示例 Service public class ReportService {Async(customExecutor) // 指定线程池public void generateReport() {System.out.println(生成报表中线程 Thread.currentThread().getName());} }关键点 通过 Async(beanName) 指定线程池拒绝策略推荐 CallerRunsPolicy 避免任务丢失。 案例 4异步事务管理 场景异步方法中操作数据库并保证事务一致性。 代码实现 Service public class OrderService {Autowiredprivate OrderRepository orderRepository;AsyncTransactional(propagation Propagation.REQUIRES_NEW)public void asyncCreateOrder(Order order) {orderRepository.save(order); // 事务独立提交if (order.getAmount() 0) {throw new RuntimeException(金额异常); // 触发回滚}} }关键点 异步方法需添加 Transactional 并指定传播行为如 REQUIRES_NEW主线程事务与异步线程事务相互隔离。 案例 5全局异常处理 场景捕获异步方法中的未处理异常。 1默认行为与风险 1. 无返回值方法异常静默丢弃 例如 Async public void asyncTask() {throw new RuntimeException(异步异常); // 无日志、无处理 }异常会被 Spring 默认的 SimpleAsyncUncaughtExceptionHandler 处理仅打印 ERROR 级别日志但无具体堆栈信息。 2. 调试困难 异步线程的异常不会传播到调用线程若未记录日志可能无法发现潜在问题。 2最佳实践 1. 无返回值处理异常: 通过自定义异常处理器统一记录日志或发送告警 Configuration EnableAsync public class AsyncConfig implements AsyncConfigurer {Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return (ex, method, params) - {// 记录日志或发送告警log.error(异步方法 {} 异常参数: {}, method.getName(), Arrays.toString(params), ex);// 发送邮件/企业微信通知可选};} }使用示例: Service public class NotificationService {Asyncpublic void sendEmail() {throw new RuntimeException(邮件发送失败);} }触发场景调用 sendEmail() 时异常会被 AsyncUncaughtExceptionHandler 捕获并记录日志。 2. 结合返回值处理异常: 1. 通过 Future.get() 捕获异常 使用 CompletableFuture 包装返回值调用 get() 时显式捕获异常。 Service public class DataService {Asyncpublic CompletableFutureString processData() {return CompletableFuture.supplyAsync(() - {if (error) throw new RuntimeException(数据处理异常);return 处理结果;});} }RestController public class DataController {Autowiredprivate DataService dataService;GetMapping(/process)public String process() {try {return dataService.processData().get();} catch (InterruptedException | ExecutionException e) {return 处理失败: e.getCause().getMessage();}} }2. 通过 exceptionally() 链式处理 利用 CompletableFuture 的链式异常处理 Async public CompletableFutureString asyncTask() {return CompletableFuture.supplyAsync(() - {throw new RuntimeException(任务失败);}).exceptionally(ex - {log.error(任务异常, ex);return 默认值;}); }注意事项 阻塞风险Future.get() 会阻塞主线程需结合超时机制如 get(5, TimeUnit.SECONDS)。线程池隔离建议为耗时任务配置独立线程池避免核心业务线程池被阻塞。 总结与最佳实践 场景策略适用场景无返回值 无需关注结果必须实现 getAsyncUncaughtExceptionHandler日志记录、消息推送等非关键任务无返回值 需关注结果重构为有返回值方法或实现异常处理器数据同步、状态更新等关键任务有返回值优先通过 Future 或 CompletableFuture 处理异常批量处理、复杂计算等需返回结果的任务 最佳实践 混合使用对关键任务使用 CompletableFuture 返回值非关键任务用 void 全局处理器。监控告警在 AsyncUncaughtExceptionHandler 中集成 Sentry 或 Prometheus 监控。事务拆分异步方法涉及数据库操作时确保事务边界清晰如拆分到独立服务。线程池隔离为耗时任务配置独立线程池避免核心业务线程池被阻塞。 **案例 6定时任务异步化 场景XXL-JOB 任务异步执行避免阻塞调度线程。代码示例Component XxlJob(generateTask) public class TaskJob {Asyncpublic void generateTask(String param) {// 异步执行耗时任务} }风险调度平台无法获取执行结果需通过日志或回调机制跟踪状态。 五、性能优化与监控 参数调优 核心公式 核心线程数 ≈ CPU 核心数 × 2队列容量根据任务平均耗时调整避免 OOM。 拒绝策略选择 生产推荐使用 CallerRunsPolicy由调用线程执行任务避免任务丢失executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());监控指标 关键指标活跃线程数 (getActiveCount())、队列大小 (getQueue().size())、已完成任务数 (getCompletedTaskCount())。 总结与最佳实践 场景技术方案简单异步任务无返回值方法 默认线程池结果依赖任务CompletableFuture 包装返回值高并发优化自定义 ThreadPoolTaskExecutor数据库事务Transactional 独立传播行为异常处理AsyncUncaughtExceptionHandler 注意事项 避免同类内调用 Async 方法需通过代理对象调用监控线程池状态活跃线程数、队列堆积防止资源耗尽异步方法中谨慎使用 ThreadLocal需通过 TaskDecorator 传递上下文。
http://www.eeditor.cn/news/126300/

相关文章:

  • 宁波网站建设报价网站的策划建设方案书
  • 郑州网站建设排行深圳建网站seo
  • 微网站建设包含天元建设集团有限公司设计研究院征求意见
  • 做门图网站网站设计的企业
  • 乌市正规网站建设微信朋友圈营销文案
  • 做网站必备深圳室内设计公司50强
  • 温江 网站建设wordpress jplayer
  • 阿里巴巴网站谁做的sem优化托管公司
  • 成都彩票网站建设wordpress 弹框
  • 如何做网站旅游产品分析什么是虚拟主机
  • 湖南网站建设开发苏州网页优化软件
  • 网站转备案WordPress 三图
  • 做安卓icon图标包下载网站建行企业网站
  • 网站开发团队取什么名字好wordpress子目录 多站点
  • 深圳做营销网站制作网站建设企业开源
  • wordpress全站cdn教程湛江网站建设方案服务
  • 网站报价清单wordpress 分页 404
  • 网站建设和网页设计pdf电子商务 网站建设
  • 国外室内设计案例网站女生学电子商务后悔了
  • 长春手机建站模板小程序如何快速推广
  • 如何判断网站有cdn加速asp网站连接数据库
  • 临汾做网站的公司推广平台排名
  • 免费的网站模板有哪些怎么制作自己的简历
  • 让路由器做网站服务器oa办公系统开发
  • 关于单位网站建设的报告上海知名装修公司排行
  • 主机公园 wordpressseo是什么部门
  • 开发网站公司怎么样wordpress 游客评论
  • 青岛手机建站多少钱小型营销企业网站建设策划
  • 网站流量统计表专业做网站公司哪家好
  • 免费创网站深圳罗湖做网站公司