整合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原型,既可以让前端人员在浏览器中直接打开查看样式,也可以让后端人员结合数据来查看显示效果。更重 ...
SpringBoot基础配置
准备工作使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为hellospringboot,之后在项目根目录中新建controller包,同时在该包内新建MyController类,里面的代码为(忽略导包操作):
1234567@RestControllerpublic class MyController { @GetMapping("/hello") public String hello(){ return "hey,SpringBoot"; }}
然后运行启动类中的main方法,启动项目,在浏览器地址栏中输入http://localhosts:8080/hello即可访问到该页面。
不使用spring-boot-starter-parent入门篇说了在向pom.xml文件中添加依赖前需要先添加spring-boot-starter-parent,而spring-boot-starter-parent主要提供了如下默认的配置信息 ...
SpringBoot入门
什么是SpringBoot?SpringBoot可以快速启动一个生产级的项目,简化开发流程,让java开发变得简单粗暴。在以前学习使用SSM框架时,需要复杂、大量的配置文件和依赖,没有人管理极易造成依赖冲突,高低版本不兼容等问题。
为了更好的理清SSM开发的流程,这里简单回忆一下:配置环境–>创建工程–>构建目录结构–>组件依赖管理–>配置web容器–>设置组件参数–>业务开发–>测试与构建–>手动部署–>运维与监控等十个步骤。
那么使用SpringBoot后,应用开发流程就变为:配置环境(不需要搭建tomcat)–>Spring Initializr–>配置参数(可选)–>业务开发–>自动构建–>自动部署–>运维与监控等七个步骤。
SpringBoot的核心特性SpringBoot的核心特性有以下6点:1、极低的学习成本。只需要你会spring,那么就可以在一个小时内学会SpringBoot;2、可独立运行的spring项目。当你使用ssm框架时需要将项目编译为war包,然后上传至web服务器T ...
快速入门SpringBoot(进阶)
本篇笔记中主要介绍了以下几个内容:1、使用@Valid注解进行表单验证;2、使用AOP来处理请求;3、统一异常处理;4、之前是使用postman进行测试,现在介绍如何使用单元测试。注意本篇笔记使用了前面一篇《2小时入门Springboot》的红包项目代码。(阅读本篇文章,最好有AOP基础,否则比较吃力)
首先回忆起前面创建单个红包时的create方法:
12345678@PostMapping("/luckymoneys")public Luckymoney create(@RequestParam("sender")String sender, @RequestParam("money")BigDecimal money){ Luckymoney luckymoney = new Luckymoney(); luckymoney.setSender(sender); luckymoney.setMoney(money) ...