开发者工具与单元测试
本篇来学习开发者工具和单元测试相关的知识,对于一个开发者来说了解开发工具和单元测试对于自身水平提高有着非常大的帮助。SpringBoot中提供了一组开发者工具spring-boot-devtools,用于提升开发效率,开发人员可以将该模块包含在任何项目中,而spring-boot-devtools最令人喜欢的地方就是支持热部署,当开发者修改了部分代码或者资源后,SpringBoot项目会自动更新。
devtools使用devtools基本使用当开发者想要在项目中加入devtools模块,只需添加相关依赖即可:
123456<!--引入devtools依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> ...
构建RESTful服务
本篇来学习RESTful相关知识,相信通过本篇的学习,开发者就能在短时间内开发出一套属于自己的RESTful风格的应用。
REST简介 REST(Representational State Transfer )是一种Web软件架构风格,它是一种风格,而不是标准,匹配或兼容这种架构风格的网络服务称为REST服务。REST服务简洁并且有层次,REST通常基于HTTP、URI和XML以及HTML这些现有的广泛流行的协议和标准。在REST中,资源是由URI 来指定的,对资源的增删改查操作可以通过HTTP协议提供的GET、POST、PUT、DELETE等方法实现。使用REST可以更高效地利用缓存来提高响应速度, 同时REST中的通信会话状态由客户端来维护,这可以让不同的服务器处理一系列请求中的不同请求,进而提高服务器的扩展性。在前后端分离项目中,一个设计良好的Web软件架构必然要满足RESTful风格。 在Spring MVC框架中,开发者可以通过@RestController注解开发一个REST服务,不过,Spring Boot对此提供了自动化配置方案,开发者只需要添加相关依赖就能快速构 ...
整合NoSQL---MongoDB及Session共享
本篇继续学习如何整合非关系型数据库(NoSQL),主要是MongoDB的整合,顺便学习如何进行Session的共享。
MongoDB简介MongoDB是一种面向文档的数据库管理系统,它是一个介于关系型数据库和非关系型数据库之间的产品,MongoDB功能丰富,它支持一种类似JSON的BSON数据格式,既可以存储简单的数据格式,也可以存储复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,且支持对数据建立索引。总的来说,MongoDB是一款应用相当广泛的NoSQL数据库。
MongoDB安装目前MongoDB最新版为4.4.1,但是为避免一些问题,此处依然使用4.0.0版本,安装环境选择CentOS7,安装的步骤如下:第一步,下载MongoDB。进入到home目录下执行如下命令下载MongoDB:
1wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
下载完成后,将下载的MongoDB解压,并将解压后的文件夹重命名为mongodb,可执行如下命令:
12tar -zxvf mongodb- ...
整合NoSQL---Redis
在前面学习了SpringBoot如何整合关系型数据库,接下来开始学习如何整合非关系型数据库(NoSQL),本篇主要介绍Redis的整合,具体包括Redis介绍、Redis集群搭建,SpringBoot整合单机版Redis和SpringBoot整合Redis集群等。
非关系型数据库非关系型数据库(NoSQL)和关系型数据库两者存在许多的显著不同点,其中最重要的是NoSQL不使用SQL作为查询语言。其数据存储可以不需要固定的表格模式,一般都有水平可扩展的特征。NoSQL主要有如下几种不同的分类:
Key/Value键值存储。这种数据存储通常都是无数据结构的,一般被当作字符串或者二进制数据,但是数据加载速度快,典型的使用场景就是处理高并发或者用于日志系统等,这一类的数据库有Redis、Tokyo Cabinet等。
列存储数据库。列存储数据库功能相对局限,但是查找速度快,容易进行分布式扩展,一般用于分布式文件系统中,这一类的数据库有HBase、Cassandra等。
文档型数据库。和Key/Value键值存储类似,文档型数据库也没有严格的数据格式,这既是缺点也是优点,因为不需要预先创建表结 ...
配置多数据源
接下来学习SpringBoot如何配置多数据源。所谓多数据源就是一个Java EE项目中采用了不同数据库实例中的多个库,或者是同一个数据库实例中的多个不同库。一般来说,采用MyCat等分布式数据库中间件是比较好的解决方案,这样可以把数据库读写分离、分库分表、备份等操作交给中间件去做,这样Java代码只需要专注于业务即可。不过这并不意味着无法使用Java代码解决类似的问题,在Spring Famework中就可以配置多个数据源,SpringBoot作为其中的佼佼者,自然也同样支持多数据源的配置,只是配置方式有些变化而已。
下面就分别介绍使用Jdbc Template、Mybatis和SpringData JPA等不同持久层框架时的多数据源配置。
Jdbc Template多数据源Jdbc Template多数据源配置是最简单的一个,因为一个Jdbc Template就对应一个DataSource,开发者只需要提供多个DataSource,再手动配置Jdbc Template即可。具体配置如下:第一步,创建数据库。使用下面的SQL语句来手动创建两个数据库和表:
12345678910111 ...
持久层技术整合
持久层是Java EE访问数据库的核心操作,SpringBoot中对常见的持久层框架都提供了自动化配置,如Spring内置的jdbc Template、JPA等,而Mybatis的自动化配置则是由Mybatis官方提供的。本篇就来学习SpringBoot如何整合这几种持久层技术,既然是整合那么对于这些持久层的用法就不会有较复杂的介绍。个人建议研究Mybatis和JPA就足矣,jdbc Template可以忽略。
整合jdbc TemplateJdbc Template是Spring内置的一套JDBC模板框架,使用AOP技术来解决直接使用JDBC时需要大量重复代码的问题。Jdbc Template虽然没有Mybatis那么灵活,但是比直接使用JDBC要方便很多。SpringBoot中对Jdbc Template的使用提供了自动化配置类JdbcTemplateAutoConfiguration,查看一下它的部分源码:
1234567891011121314151617181920212223242526272829303132@Configuration@ConditionalOnClas ...
SpringBoot Web开发整合(下)
本篇是Web开发整合的下篇内容,具体包括、启动系统任务、整合Servlet、Filter和Listener路径映射、配置AOP、自定义欢迎页、自定义favicon和除去某个自动配置等相关知识。
启动系统任务众所周知,有一些特殊的任务需要在系统启动时执行,如配置文件加载、数据库初始化等操作。如果没有使用SpringBoot,这些问题可以在Listener中得到解决。SpringBoot对此提供了两种方式:CommandLineRunner和ApplicationRunner。这两种基本上差不多,只是使用时的参数不同而已。
CommandLineRunnerSpringBoot项目在启动时会遍历所有CommandLineRunner的实现类,并调用其中的run方法,如果整个系统中存在多个CommandLineRunner的实现类,那么可以使用@Order注解来对这些实现类的调用顺序进行排序。
查看CommandLineRunner源码可知为一个函数式接口,其中只包含一个run方法:
1234@FunctionalInterfacepublic interface CommandLineRu ...
SpringBoot Web开发整合(中)
本篇是Web开发整合的中篇内容,具体包括:自定义错误页、CORS支持、配置类与XML配置和注册拦截器等相关知识。
自定义错误页在上篇中介绍了使用@ControllerAdvice配和@ExceptionHandler注解来处理全局异常。在处理异常时,开发者可以根据实际情况返回不同的页面,但是这种异常处理方式一般用来处理应用级别的异常,有一些容器级别的错误就处理不了,如Filter中抛出异常,使用@ControllerAdvice定义的全局异常处理机制就无法处理,很高兴SpringBoot开发团队意思到了这一点,提供了其他的异常处理方式。
通过前面的学习在访问请求过程中,多多少少也碰到过404和500等页面,它们就是根据用户在发起请求时发生的错误类型来返回不同的页面:
使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为errorspringboot,然后添加spring-boot-starter-web依赖。
实际上,SpringBoot在返回错误信息的时候不一定返回HTML页面,就像前面设置的当你返回String对象就是JSON对象,返回 ...
SpringBoot Web开发整合(上)
本篇来学习SpringBoot如何整合Web开发,由于其中涉及的内容非常多,因此分为三篇来进行记录。所谓的SpringBoot如何整合Web开发,其实就是对前面的一些具体细节的补充。本篇学习的内容具体包括:返回JSON数据、静态资源访问、文件上传和@ControllerAdvice等相关知识。
返回JSON数据默认实现JSON是目前主流的前后端数据传输方式,SpringMVC中使用消息转换器HttpMessageConverter对JSON的转换提供了很好的支持,在SpringBoot中这种支持更进一步得到了提升,也对相关的配置做了进一步的简化。在默认情况下,当开发人员新创建一个SpringBoot项目后,添加Web依赖,也就是web启动器:
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
这个依 ...
视图层技术整合
本篇学习SpringBoot如何整合视图层技术,其实这就是学习如何使用SpringBoot并结合视图层可以轻松搭建一个完整的Web应用,这里主要学习Thymeleaf(读作[taɪm lif],百里香)和FreeMarker。尽管在目前企业级的应用开发中,前后端分离是趋势,但是视图层技术还是占用一席之地。SpringBoot对视图层技术也提供了很好的支持,官方推荐使用的模板引擎是Thymeleaf,但是FreeMaker也支持,当然你可以像SSM中使用JSP等,但是非常不推荐使用。因此这里对于Thymeleaf和FreeMarker的介绍不会太深。
整合ThymeleafThymeleaf是新一代的Java模板引擎,类似于Velocity、FreeMaker等传统的Java模板引擎。但是Thymeleaf与它们的不同之处在于Thymeleaf支持HTML原型。如果你之前使用过JSP的话,你会发现不运行Java后端容器Tomcat,你是无法直接查看jsp网页的。但是Thymeleaf支持HTML原型,既可以让前端人员在浏览器中直接打开查看样式,也可以让后端人员结合数据来查看显示效果。更重 ...