Spring Boot实战(八)Spring Boot 的数据访问

Spring Data项目是Spring用来解决数据访问问题的一揽子解决方案,Spring Data是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案。Spring Data使我们可以快速且简单地使用普通的数据访问技术及新的数据访问技术。

Spring Data为我们使用统一的API来对数据存储技术进行数据访问操作提供了支持。这是Spring通过提供Spring Data Commons项目来实现的,它是上述各种Spring Data项目的依赖。Spring Data Commons 让我们在使用关系型或非关系型数据访问技术时都使用基于Spring的统一标准,该标准包含CRUD(创建、获取、更新、删除)、查询、排序和分布的相关的操作。

此处介绍下Spring Data Commons的一个重要概念:Spring Data Repository抽象。使用Spring Data Repository可以极大地减少数据访问层的代码。既然是数据访问操作的统一标准,那肯定是定义了各种各样的和数据访问相关的接口,Spring Data Repository抽象的根接口是Repository接口:

不同的数据访问技术也提供了不同的Repository,如Spring Data JPA 有 JpaRepository、Spring Data MongoDB有MongoRepository。

Spring Data项目还给我们提供了一个激动人心的功能,即可以根据属性名进行计数、删除、查询方法等操作,例如

public interface PersonRepository extends Repository<Person,Long> {
	//按照年龄计数
	Long countByAge(Integer age);
	//按照名字删除
	Long deleteByName(String name);
	//按照名字查询
	List<Person> findByName(String name);
	//按照名字和地址查询
	List<Person> findByNameAndAddress(String name,String address);

我们将在8.2节对Spring Data提供的简化数据访问操作进行更为详细的讲解。

本章将学习Spring Data JPA、Spring Data MongoDB、Spring Data REST、Spring Data Redis。通过对这些Spring Data项目的学习,并按照Spring Data提供的统一标准当你有需要的时候,也会快速掌握Spring Data的其它项目。

8.1引入 Docker

大家也许很奇怪为什么在此处要引入Docker,Dockers究竟是什么,它能干什么?
Docker这两年大受追捧,风光无二。Docker是一个轻量级容器技术,类似于虚拟机技术(xen、kvm、vmware、virtualbox)。Docker是直接运行在当前操作系统之上(Linux),而不是运行在虚拟机中,但是也实现了虚拟机技术的资源隔离,性能远远高于虚拟机技术。

Docker支持将软件编译成一个镜像(image),在这个镜像里做好对软件的各种配置,然后发布这个镜像,使用者可以运行这个镜像,运行中的镜像称之为容器(container),容器的启动是非常快的,一般都是以秒为单位。这个有点像我们平时安装ghost操作系统?系统安装好后软件都有了,虽然完全不是一个东西,但是思路是类似的。

目前各大主流云计算平台都支持Docker容器技术,包括阿里云、百度云平台(资源隔离通过Docker实现)、Cloud Foundry(和Spring一家公司的,目前最成熟也最稳定)、HeroKu、DigitalOcean、OpenShift(JBoss)Apache Stratos、Apache MesOS(批处理平台、支持搭建基于Docker的云平台)、Deis(开源PaaS平台);连微软也会在下一个版本的Windows Server及其云平台Azure上支持Docker,这样看来Docker大有统一云计算的趋势。

扫描二维码关注公众号,回复: 5977087 查看本文章

这里的云计算平台一般指的是PaaS(平台即服务),它是一个这样的云计算;平台提供了存储、数据库、网络、负载均衡、自动扩展等功能,你只需将你的程序交给云计算平台就可以了。你的程序可以是用不同的编程语言开发的,而使用的Docker的云计算平台就是用Docker来实现以上功能及不同程序之间的隔离的。

目前主流的软件以及非主流的软件大部分都有人将其封装成Docker镜像,我们只需下载Docker镜像,然后运行镜像就可以快速获得已做好配置可运行的软件。

从本章开始,我们的数据库将使用Oracle XE、需安装Redis作为缓存和NoSQL数据库的演示、需安装MongoDB进行NoSQL数据库演示。

在第9章需要安装ActiveMQ以及RabbitMQ进行异步消息的演示。在第10章我们会演示基于Docker的Spring Boot的部署。使用Docker后我们将不用手动下载、安装和配置这些软件。

另外要特别指出的是,Docker并不是为开发测试方便而提供的小工具,而是可以用于实际生产环境的一种极好的部署方式。

当然,如果你觉得目前没有迫切学习Docker的必要,可以略过此节,并自行下载安装示例中所需要的软件,不过这么简单易用的技术还是强烈建议学习一下。

8.1.1 Docker 的安装

因为Docker的运行原理是基于Linux的,所以Docker只能在Linux下运行。不要紧张,这只能说明在真正的生产环节下,基于Docker的部署只能在Linux上,但是我们在开发测试的时候,Docker是可以在Windows以及Mac OS X系统下的,运行的原理是启动一个VirtualBox虚拟机,在此虚拟机里运行Docker。

1.Linux下安装
CentOS安装命令:

sudo yum update
sudo yum install docker

Ubuntu:

sudo apt-get update
sudo apt-get docker.io

2.Windows下安装
Windows下运行Docker是通过这个Boot2Docker这个软件来实现的,这个软件包含了一个VirtualBox。在Windows下的Docker只适合于开发测试,不适合于生产环境。

Boot2Docker 下载地址:

因在Windows下运行的Docker是基于VirtualBox虚拟机软件,因此在安装前请确认电脑的BIOS设置中的CPU虚拟化技术支持已经开启。

双击docker-install.exe 开始安装,如图所示。
在这里插入图片描述
选择完整安装,其中,MSYS-git UNIX tools是在Windows下运行UNIX(Linux)命令的工具,如图
在这里插入图片描述

勾选“Reboot Windows at end of installation(选择安装完成后重启电脑)”选项,如图

在这里插入图片描述
安装“通过中午总线控制器”,如图
在这里插入图片描述

安装完成后,自动重启电脑。启动Docker,选择桌面图标Boot2Docker Start,如图。
在这里插入图片描述
安装成功验证,输入下面命令验证Docker版本,如图

docker -v

在这里插入图片描述
此时VirtualBox运行了一个虚拟机。打开VirtualBox软件,如图。
在这里插入图片描述
8.1.2 Docker常用命令及参数
1.Docker镜像命令及参数
基于Docker镜像是可以自己编译的,我们将在10.3节讲解如何编译自己的Docker镜像,本节我们讲述与Docker镜像操作相关的命令。
通常情况下,Docker的镜像都放置在Docker官网的Docker Hub上,地址是 https://registry.hub.docker.com

(1) Docker镜像检索
除了可以在https://registry.hub.docker.com网站检索镜像以外,还可以用下面命令检索:

docker search 镜像名

检索Redis,输入:

docker search redis

(2)镜像下载
下载镜像通过下面命令实现:

docker pull 镜像名

下载Redis 镜像,运行:

docker pull redis

这根据网络情况可能要花费一段时间。
(3)镜像列表
查看本地镜像列表,如图,通过下面命令

docker images

在这里插入图片描述
其中REPOSITORY是镜像名;TAG是软件版本,latest为最新版;IMAGE ID 是当前镜像的唯一标识;CREATED是当前镜像创建时间;SIZE是当前镜像的大小。
(4)镜像删除
删除指定镜像通过下面命令:

docker rmi image-id

删除所有镜像通过下面命令:

docker rmi $(docker images -q)

2.Docker容器命令
(1)容器基本操作
最简单的运行镜像为容器的命令如下:

docker run --name container-name -d image-name

运行一个容器只要通过Docker run命令即可实现,其中, --name参数是为容器取得名称 -d 表示 detached,意味着执行完成这句命令后控制台将不会被阻碍,可继续输入命令操作;最后的image-name 是要使用哪个镜像来运行容器。

我们来运行一个Redis容器:

docker run --name test-redis -d redis

Docker会为我们的容器生成唯一的标识。
(2)容器列表
通过下面的命令,查看运行中的容器列表,如图

docker ps

在这里插入图片描述
其中Container ID是在启动的时候生成的ID;IMAGE是该容器使用的镜像;COMMAND是容器启动时调用命令;CREATED是容器创建时间;STATUS是当前容器的状态;PORTS是容器系统所使用的端口号,Redis默认使用6379端口;NAMES是刚才给容器定义的名称。
通过下列命令可查看运行和停止状态的容器:

docker ps -a

(3)停止和启动容器
1)停止容器
停止容器通过下面的命令:

docker stop container-name/container-id

我们可以通过容器名称或者容器id来停止容器,以停止上面的Redis容器为例:

docker stop test-redis

此时运行中的容器列表为空。查看所有容器命令,可看出此时的STATUS为退出
2)启动容器
启动容器通过下面命令:

docker start container-name/container-id

再次启动我们刚才停止的容器:

docker start test-redis

此时查看容器列表如图

在这里插入图片描述
3)端口映射
Docker容器中运行的软件所使用的端口,在本机和本机的局域网是不能访问的,所以我们需要将Docker容器中的端口映射到当前主机的端口上,这样我们在本机和本机所在的局域网就能够访问该软件了。
Docker的端口映射是通过一个-p参数来实现的。我们以刚才的Redis为例,映射容器的6379端口到本机的6378端口,命令如下:

docker run -d -p 6378:6379 --name port-redis redis

目前在Windows下运行的Docker其实是运行在VirtualBox虚拟机中的,即我们当前的本机并不是我们当前的开发机器,而是VirtualBox虚拟机,所以我们还需要再做一次端口映射,将VirtualBox虚拟的端口映射到当前的开发机器。这部分内容将在实际部署软件的时候进行演示。

4)删除容器
删除单个容器,可通过下面的命令:

docker rm container-id

删除所有容器,可通过下面的命令:

docker rm $(docker ps -a -q)

5)容器日志
查看当前容器日志,可通过下面的命令:

docker logs container-name/container-id

我们查看下上面一个容器的日志,如图

docker logs port-redis

在这里插入图片描述
6)登录容器
运行中的容器其实是一个功能完备的Linux操作系统,所以我们可以像常规的系统一样登录并访问容器。
我们可以使用下面命令,登录访问当前容器,登录后我们可以在容器中进行常规的Linux系统操作命令,还可以使用exit 命令退出登录。

docker exec -it container-id/container-name bash

8.1.3 下载常用的Docker镜像
有些需要下载的镜像还是比较大的,所以在此处先下载下来,以备后面使用。
Oracle xe、MongoDB、Redis、和ActiveMQrabbit MQ以及带有管理界面的RabbitMQ的镜像分别如下:RabbitMQ以及带有管理界面的RabbitMQ;

docker pull wnameless/oracle-xe-11g
docker pull mongo
docker pull redis:2.8.21
docker pull cloudesire/activemq
docker pull rabbitmq
docker pull rabbitmq:3-management

下载完成后,查看Docker镜像列表,如图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40929047/article/details/87599884