在开始访问数据之前,我们先来总览一下Spring生命之树。讲完了AOP的概念之后,我们继续往上走,来到了Spring对数据的访问层。

本章内容
活用模板方法和Callback
数据访问中的多数据源
0x01活用模板方法和Callback
通常对一些资源的访问,我们都需要首先创建连接,然后进行一些操作,对操作进行异常捕获处理,最后关闭资源的连接。这些对资源的访问操作往往都可以使用模板方法和Callback对其进行封装,达到更加优雅的实现。
这种操作有两个特点:
- 不变的:对资源连接的管理,异常的处理,资源的关闭。
- 变化的:对获取的资源进行操作。
于是,我们可以使用Callback来封装那些需要变化的东西,使用模板方法来封装那些不变的东西。
下面以封装FtpClient的访问作为例子来使用模板方法和Callback。

我们可以封装如下:

Callback回调接口定义如下:

在真正使用的时候,如下:

作为工具类,我们可以直接将这些常用的FTP操作方法定义到FTPClientTemplate中,然后让FTPClientTemplate来实现这些接口。
0x02数据访问中的多数据源
出于灾难恢复或者负载均衡之类的目的考虑,生产环境中通常会存在多台数据库服务器。
下面用两个角度来阐述下在应用程序中,如何对多个数据源进行管理。
主权独立的多数据源



“合纵连横”的多数据源




当然,我们也可以将这两种进行整合:


总结:
本文讲了两个方面的内容:
活用模板方法和Callback
数据访问中的多数据源
网友评论