在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然后给予相应的处理即可。但实现的方式却有好多种,例如:
1 | try { |
像这种标准的 try-catch
是可以解决问题,但如果让你在每个接口实现里面都 try-catch
一下,我想你应该是不太愿意的。那么下面来介绍下 SpringBoot 为我们提供的处理方式。
崇尚专注,乐于分享
在互联网时代,我们所开发的应用大多是直面用户的,程序中的任何一点小疏忽都可能导致用户的流失,而程序出现异常往往又是不可避免的,那该如何减少程序异常对用户体验的影响呢?其实方法很简单,对异常进行捕获,然后给予相应的处理即可。但实现的方式却有好多种,例如:
1 | try { |
像这种标准的 try-catch
是可以解决问题,但如果让你在每个接口实现里面都 try-catch
一下,我想你应该是不太愿意的。那么下面来介绍下 SpringBoot 为我们提供的处理方式。
SpringBoot 允许你外部化你的配置,以便你可以在不同的环境中使用相同的应用程序代码。你可以使用 properties文件、YAML 文件、环境变量和命令行参数来外部化配置。可以使用 @Value
注解直接将属性值注入到 Bean 里面,也可以通过 @ConfigurationProperties
将属性绑定到结构化对象中。
SpringBoot 会默认加载类路径下的 application.properties
配置,延续上一篇中的例子,我们在配置文件中添加上允许登录的用户名及密码。
application.properties
配置:
1 | user.name = 13632672222 |
用户 Controller:
1 | @RestController |
SpringBoot 非常适合 Web 应用开发,我们可以使用它轻松地建立一个 Web 服务。在Spring Boot入门 里面,我们已经使用其实现一个非常简单的接口,输出了 Hello World!下面我们模拟真实的场景来学习 SpringBoot 应用开发。
在实际的项目场景中,前后分离几乎是所以项目的标配,全栈的时代的逐渐远去,后端负责业务逻辑处理,前端负责数据展示成了一种固定的开发模式。一般来说,在后端提供的数据接口中,可能会存在两种数据形式 Json 与 XML,具体会用到哪一种,往往会与公司的工程师文化相关。
对于 SpringBoot 来说 ,它默认会使用 Json 作为响应报文格式,我们用一个简单的例子做一下测试:
首先,我们创建一个 UserController 用于处理前端的 Web 请求。
1 | @Controller |
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot 可以轻松创建一个基于 Spring 且独立运行的生产级应用。
SpringBoot 的安装有很多种方式,最简单的一种是直接将 spring-boot-*.jar 等文件添加到工程的 classpath 下,这种你就可以运行并调试你的应用了。如果是企业级应用,推荐使用构建工具来管理项目的依赖,比如:Maven 或者 Gradle 等。对于直接添加 classpath 的方式,这里不做多余的介绍,下面主要描述基于构建工具的安装指导。
Spring Boot 与 Apache Maven 3.2兼容。如果你还没有安装 Maven,可以按照 maven.apache.org 上的说明进行操作。
Spring Boot 依赖使用 org.springframework.boot
作为 groupId。通常情况下,你的 POM 文件会继承 spring-boot-starter-parent
工程,然后再声明一个或多个 Starters 的依赖。Spring Boot 同时也提供了一个可选的 Maven 插件用来生成可执行的 Jar 包。
Drools 作为一个优秀的开源规则引擎,它的功能无疑是非常强大的。与普通的规则硬编码相比,Drools 有着非常多的优点,比如:规则的动态更新、规则配置的可视化等。
使用或了解过 Drools 的小伙伴们应该知道它里面定义了很多的概念,其中有一个比较重要的就是 KieModule
,而 Drools 的规则动态更新也就是基于对 KieModule
地动态加载。由于一般在现实的使用场景中,规则内容都会被打包成一个 Jar 文件,然后由 KieScanner
根据 Jar 的 GAV(groupId/artifactId/version) 对其进行扫描加载,从而实现规则的动态更新。那么 Drools 是怎样根据 GAV 来控制规则的版本管理的呢?
Maven 作为一个优秀的项目管理工具,其插件机制为其功能扩展提供了非常大的便捷性。虽然说大多数情况下,我们可能不太会自己去编写 Maven 插件,但不排除在某些特殊的情况下,我们需要去完成一个自己的插件,来协助我们处理某些比较通用的事情。正好,最近有一些需求可能需要对 Drools 的一个 Maven 插件进行扩展,所以学习一下 Maven 的插件编写。
本文主要是以洪泛路由的一个简单模拟,一切都源于一个朋友的请求,所以花了大概两个小时的时间完成了这么一个简单的实现。
不知道大家对洪泛算法有没有过一些了解,总之我在这之前是完全没有听说有这么一个算法存在。如果没有了解过的话,可以参考如下描述(源自百度百科的拷贝):
洪泛不要求维护网络的拓扑结构和相关的路由计算,仅要求接收到信息的节点以广播方式转发数据包。例如,源节点希望发送一段数据给目标节点。源节点首先通过网络将数据副本传送给它的每个邻居节点,每个邻居节点再将数据传送给各自的除发送数据来的节点之外的其他。如此继续下去,直到数据传送至目标节点或者数据设定的生存期限(TTL,Time To Live)为0为止。