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

网站推广计划书范文网站开发包含上线吗

网站推广计划书范文,网站开发包含上线吗,杭州煜灿网络科技有限公司网站开发,深圳网站制作公司兴田德润官网多少一、Spring 事件机制核心概念 1. 事件驱动架构模型 发布-订阅模式#xff1a;解耦事件生产者和消费者观察者模式#xff1a;监听器监听特定事件事件驱动优势#xff1a; 组件间松耦合系统扩展性好支持异步处理事件溯源支持 2. 核心组件 组件作用实现方式ApplicationEve…一、Spring 事件机制核心概念 1. 事件驱动架构模型 发布-订阅模式解耦事件生产者和消费者观察者模式监听器监听特定事件事件驱动优势 组件间松耦合系统扩展性好支持异步处理事件溯源支持 2. 核心组件 组件作用实现方式ApplicationEvent事件基类自定义事件需继承ApplicationEventPublisher事件发布接口通过Spring容器注入ApplicationListener事件监听接口实现接口或使用EventListener 二、代码示例解析 1. 事件定义 (KnowledgeService.java) Getter public static final class ImportedKnowledgeEvent extends ApplicationEvent {private final Knowledge knowledge;private final KWDocument document;// 构造器1只有knowledgepublic ImportedKnowledgeEvent(Object source, Knowledge knowledge) {super(source);this.knowledge knowledge;this.document null;}// 构造器2knowledge documentpublic ImportedKnowledgeEvent(Object source, Knowledge knowledge, KWDocument document) {super(source);this.knowledge knowledge;this.document document;} }关键点 继承ApplicationEvent基类使用final字段保证事件不可变性提供多种构造器支持不同场景使用GetterLombok提供访问方法 2. 事件发布 (KnowledgeService.java) Service public class KnowledgeService {Autowiredprotected ApplicationEventPublisher eventPublisher;public void imports() {// 发布简单知识导入事件eventPublisher.publishEvent(new ImportedKnowledgeEvent(this, new Knowledge()));// 发布知识文档导入事件eventPublisher.publishEvent(new ImportedKnowledgeEvent(this, new Knowledge(), new KWDocument()));} }发布模式 注入ApplicationEventPublisher创建事件对象包含业务数据调用publishEvent()发布支持多种事件类型重载 3. 事件监听 (KnowledgeRagflowService.java) Service public class KnowledgeRagflowService extends KnowledgeService {EventListenerpublic void importedKnowledge(KnowledgeService.ImportedKnowledgeEvent event) {if (event.getDocument() ! null) {dealDocument(event.getKnowledge(), event.getDocument());} else {dealKnowledge(event.getKnowledge());}}private void dealDocument(Knowledge knowledge, Document document) {// 处理文档逻辑}private void dealKnowledge(Knowledge knowledge) {// 处理知识逻辑} }监听器特点 使用EventListener注解简化实现方法参数决定监听的事件类型支持事件内容判断区分有无document私有方法封装具体处理逻辑 三、高级应用技巧 1. 条件监听 EventListener(condition #event.document ! null) public void handleDocumentEvent(ImportedKnowledgeEvent event) {// 仅处理包含document的事件 }2. 异步事件处理 Async EventListener public void asyncHandleEvent(ImportedKnowledgeEvent event) {// 异步处理耗时操作 }配置要求 主类添加EnableAsync配置线程池 Configuration EnableAsync public class AsyncConfig implements AsyncConfigurer {Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(25);executor.initialize();return executor;} }3. 监听器执行顺序 Order(1) EventListener public void firstListener(ImportedKnowledgeEvent event) {// 最先执行 }Order(2) EventListener public void secondListener(ImportedKnowledgeEvent event) {// 其次执行 }4. 事务绑定事件 TransactionalEventListener(phase TransactionPhase.AFTER_COMMIT) public void afterCommitEvent(ImportedKnowledgeEvent event) {// 事务提交后执行 }事务阶段选项 AFTER_COMMIT默认事务成功提交后AFTER_ROLLBACK事务回滚后AFTER_COMPLETION事务完成后提交或回滚BEFORE_COMMIT事务提交前 四、最佳实践 1. 事件设计原则 单一职责一个事件只携带一种业务变更不可变性事件发布后内容不可修改上下文完整包含所有必要业务数据命名规范使用过去时态如ImportedKnowledgeEvent 2. 性能优化 同步/异步选择 #mermaid-svg-Dj7gASor3gtjC8vw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Dj7gASor3gtjC8vw .error-icon{fill:#552222;}#mermaid-svg-Dj7gASor3gtjC8vw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Dj7gASor3gtjC8vw .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Dj7gASor3gtjC8vw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Dj7gASor3gtjC8vw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Dj7gASor3gtjC8vw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Dj7gASor3gtjC8vw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Dj7gASor3gtjC8vw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Dj7gASor3gtjC8vw .marker.cross{stroke:#333333;}#mermaid-svg-Dj7gASor3gtjC8vw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Dj7gASor3gtjC8vw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Dj7gASor3gtjC8vw .cluster-label text{fill:#333;}#mermaid-svg-Dj7gASor3gtjC8vw .cluster-label span{color:#333;}#mermaid-svg-Dj7gASor3gtjC8vw .label text,#mermaid-svg-Dj7gASor3gtjC8vw span{fill:#333;color:#333;}#mermaid-svg-Dj7gASor3gtjC8vw .node rect,#mermaid-svg-Dj7gASor3gtjC8vw .node circle,#mermaid-svg-Dj7gASor3gtjC8vw .node ellipse,#mermaid-svg-Dj7gASor3gtjC8vw .node polygon,#mermaid-svg-Dj7gASor3gtjC8vw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Dj7gASor3gtjC8vw .node .label{text-align:center;}#mermaid-svg-Dj7gASor3gtjC8vw .node.clickable{cursor:pointer;}#mermaid-svg-Dj7gASor3gtjC8vw .arrowheadPath{fill:#333333;}#mermaid-svg-Dj7gASor3gtjC8vw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Dj7gASor3gtjC8vw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Dj7gASor3gtjC8vw .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Dj7gASor3gtjC8vw .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Dj7gASor3gtjC8vw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Dj7gASor3gtjC8vw .cluster text{fill:#333;}#mermaid-svg-Dj7gASor3gtjC8vw .cluster span{color:#333;}#mermaid-svg-Dj7gASor3gtjC8vw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Dj7gASor3gtjC8vw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是 否 事件发布 是否耗时? 异步处理 同步处理 批量处理对高频事件进行批量合并事件过滤在监听器内部添加条件判断 3. 错误处理 EventListener public void handleEvent(ImportedKnowledgeEvent event) {try {// 业务处理} catch (Exception e) {// 1. 记录错误日志// 2. 发布错误处理事件// 3. 重试机制如Spring Retry} }4. 测试策略 SpringBootTest class KnowledgeEventTest {Autowiredprivate ApplicationEventPublisher eventPublisher;MockBeanprivate KnowledgeRagflowService ragflowService;Testvoid shouldTriggerListenerWhenPublishEvent() {// 准备测试事件ImportedKnowledgeEvent event new ImportedKnowledgeEvent(this, new Knowledge());// 发布事件eventPublisher.publishEvent(event);// 验证监听器调用verify(ragflowService, timeout(1000)).importedKnowledge(event);} }五、典型应用场景 业务状态变更通知 知识导入完成通知文档处理状态更新 跨模块协作 知识导入后触发索引更新文档处理完成后通知搜索服务 系统生命周期事件 EventListener public void onApplicationReady(ContextRefreshedEvent event) {// 应用启动完成后初始化资源 }审计日志记录 EventListener public void auditLog(ImportedKnowledgeEvent event) {log.info(Knowledge imported: {}, event.getKnowledge().getId()); }业务流程编排 #mermaid-svg-y8tJql9wPSCD7d3g {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-y8tJql9wPSCD7d3g .error-icon{fill:#552222;}#mermaid-svg-y8tJql9wPSCD7d3g .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-y8tJql9wPSCD7d3g .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-y8tJql9wPSCD7d3g .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-y8tJql9wPSCD7d3g .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-y8tJql9wPSCD7d3g .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-y8tJql9wPSCD7d3g .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-y8tJql9wPSCD7d3g .marker{fill:#333333;stroke:#333333;}#mermaid-svg-y8tJql9wPSCD7d3g .marker.cross{stroke:#333333;}#mermaid-svg-y8tJql9wPSCD7d3g svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-y8tJql9wPSCD7d3g .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-y8tJql9wPSCD7d3g text.actortspan{fill:black;stroke:none;}#mermaid-svg-y8tJql9wPSCD7d3g .actor-line{stroke:grey;}#mermaid-svg-y8tJql9wPSCD7d3g .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-y8tJql9wPSCD7d3g .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-y8tJql9wPSCD7d3g #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-y8tJql9wPSCD7d3g .sequenceNumber{fill:white;}#mermaid-svg-y8tJql9wPSCD7d3g #sequencenumber{fill:#333;}#mermaid-svg-y8tJql9wPSCD7d3g #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-y8tJql9wPSCD7d3g .messageText{fill:#333;stroke:#333;}#mermaid-svg-y8tJql9wPSCD7d3g .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-y8tJql9wPSCD7d3g .labelText,#mermaid-svg-y8tJql9wPSCD7d3g .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-y8tJql9wPSCD7d3g .loopText,#mermaid-svg-y8tJql9wPSCD7d3g .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-y8tJql9wPSCD7d3g .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-y8tJql9wPSCD7d3g .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-y8tJql9wPSCD7d3g .noteText,#mermaid-svg-y8tJql9wPSCD7d3g .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-y8tJql9wPSCD7d3g .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-y8tJql9wPSCD7d3g .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-y8tJql9wPSCD7d3g .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-y8tJql9wPSCD7d3g .actorPopupMenu{position:absolute;}#mermaid-svg-y8tJql9wPSCD7d3g .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-y8tJql9wPSCD7d3g .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-y8tJql9wPSCD7d3g .actor-man circle,#mermaid-svg-y8tJql9wPSCD7d3g line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-y8tJql9wPSCD7d3g :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ImportService EventBus IndexService NotificationService 发布ImportedKnowledgeEvent 触发索引更新 触发通知发送 ImportService EventBus IndexService NotificationService 六、常见问题解决方案 监听器未触发 检查事件类型是否匹配确认监听器在Spring容器中验证事件是否成功发布 循环事件触发 // 使用标记防止循环 public void imports() {if (!EventContext.isEventProcessing()) {eventPublisher.publishEvent(...);} }事件数据过大 改为传递引用ID而非整个对象使用DTO精简数据添加Lazy注解延迟加载 监听器执行顺序问题 使用Order明确顺序拆分事件避免依赖 总结 Spring ApplicationEvent 提供了强大的事件驱动编程模型通过示例中的KnowledgeService和KnowledgeRagflowService展示了 如何定义包含业务数据的事件多种事件发布方式使用EventListener简化监听器实现根据事件内容执行不同处理逻辑 在实际应用中应结合 异步处理提升性能事务绑定确保数据一致性条件过滤优化事件处理完善错误处理机制 遵循高内聚、低耦合原则合理使用事件驱动架构可以显著提升系统的扩展性和可维护性。
http://www.dnsts.com.cn/news/110990.html

相关文章:

  • 郑州做网站易云巢瓷器网站怎么做
  • 做网站的流程方法成都专业网站搭建公司
  • 衡水购物网站制作江阴网站制作
  • 马鞍山天立建设网站汽车门户网站建设
  • app网站开发培训重庆机有哪些网站建设公司
  • 天动力网站开发视频制作课程
  • 重庆企业网站开发服务器未备案网站 赚钱
  • 文件链接 win wordpress网站建设优化加盟代理
  • wordpress 首页 插件夫唯老师seo
  • 网站建设加数据库网站流量不够怎么办
  • icp备案和网站不符qq空间钓鱼网站后台怎么做
  • 响应式相册网站模板下载网站降权表现
  • 网站建设公司项目介绍地方网站运营方案
  • 网站互动设计方式河北建设网网站
  • 网站建设与管理专业学什么平台建设包括什么
  • 网站搭建工具陕西省住房和城乡建设厅门户网站
  • 在线制作网站系统网站模板如何修改
  • 做外贸用什么视频网站网站开发项目工期流程
  • 那些网站权重高福建城乡建设网站查询
  • html5特效网站源码自己做的网站网页错位
  • 如何制作一网站医学类的网站做Google
  • 做网站多少钱西宁君博相约网络培训平台
  • 做加盟代理的网站黄冈贴吧黄冈论坛吧
  • 用dw做的网站容易变形合肥网站忧化
  • 创意网站设计 高端手工制作大全废物利用
  • 镇江建设局网站工程项目信息查询平台
  • 泊头网站制作案例线上销售渠道有哪些
  • 怎么在百度发布信息网站关键词优化是什么
  • 网络营销企业网站哪些平台可以打小广告
  • 聊城网站建设lchckj销售易