哲学原理SpringMVC 异常处理

by admin on 2018年10月25日

一、MyCAT概述
MyCAT是一律款款由阿里Cobar演变而来的用来支持数据库读写分离、分片的分布式中间件。MyCAT可不光支持Oracle、MSSQL、MYSQL、PG、DB2关系项目数据库,同时为支持MongoDB等非关系型数据库。基础架构如下:

一如既往、异常处理

Spring提供了多措施以异常转换为响应:

  • 一定的Spring异常将会晤自动映射为指定的HTTP状态码

   
在默认情况下,Spring会将自己的有些特别活动转换为妥的状态码,从而反馈让客户端。实际上,如果没出现其它映射的雅,响应都见面蕴藏500写态码。映射表如下:

哲学原理 1

  • 从定义格外及可加上@ResponseStatus注解,从而以该映射为有一个HTTP状态码

   
尽管这些内置映射是深有因此的,但是当我们的事情体系出现RuntimeException时,如果Spring找不至相应的放置映射,就默认是500之状态码,如果我们不思量如果500底状态码呢?怎么将我们由定义的Exception映射成想使的状态码呢?

哲学原理 2哲学原理 3

1 /**
2  * value 要匹配的异常状态码
3  * reson 提示的异常原因
4  */
5 @ResponseStatus(value = HttpStatus.NOT_FOUND,reason = "Own Exception")
6 public class OwnException extends RuntimeException {
7 }

于定义格外类

  • 当艺术齐可长@ExceptionHandler注解,使该用来拍卖非常

   
有那么些时,我们是免思量将丑陋之报错页面一直展示给客户来拘禁的,常见的做法是:搭建筑一个谈得来的页面,比如
error.jsp
,当有异常的时光,返回这个页面被客户端。但是五花八门的微机方法,如果每个地方还举行这么的拍卖,我们的次第就算会有点发臃肿……Spring
为我们 提供了平等种控制器通知(@ControllerAdvice),即:当有着控制器中带有@RequestMapping注解的点子上
出现异常的当儿,就托付为这类似的@ExceptionHandler方法处理。

哲学原理 4哲学原理 5

@ControllerAdvice
public class ExceptionHandle {

    /**
     * 当出现异常的时候,就返回error页面,当然可以多写几个ExceptionHandler 方法,细化你的异常处理
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public String handleException(){
        return "error";
    }
}

View Code

哲学原理 6

老二、跨重定向请求传递数据 

   在控制器方法返回的String
视图名称被,如果盖”redirect:”开头,那么这个String不是用来寻觅视图的,而是用来指导浏览器进行再次定向的路。有些上,我们要浏览器进行重定向后,有些数据是得保留下的,这听起来不可思议,但SpringMVC为咱提供了少数栽方案:

  • 用URL 模板盖路径变量或询问参数的花样传递数据

这种艺术将参数放在路径变量中传递,但是发生一个瑕疵就是不可知传递复杂的对象…

哲学原理 7哲学原理 8

    @RequestMapping(value = "/home",method = RequestMethod.GET)
    public String getHome(Model model){
        model.addAttribute("userName","userName");
        model.addAttribute("id",123);
        return "redirect:/home/{userName}";
    }

View Code

比如这么,如果最后的路子会让分析为 /home/userName?id=123

  • 由此flash属性发送数据

若果要传送一些对象要怎么开为?有同一种办法就是于重定向前存在session中,在重定向后再行打session中拿走下,再清理session。实际上,这种艺术是行得通之,也是值得推荐的。而且以下介绍的这种(flash
attribute)就是基于这个规律的。

哲学原理 9哲学原理 10

    /**
     * 重定向前
     * @param model RedirectAttributes ,保证对象在重定向的过程中存活下来
     * @return
     */
    @RequestMapping(value = "/list",method = RequestMethod.GET)
    public String getList(RedirectAttributes model){
        model.addAttribute("show","show");
        List<String> list = new ArrayList<String>();
        list.add("str");
        model.addFlashAttribute("list",list); // flashAttribute
        return "redirect:{show}";
    }

    /**
     * 重定向后
     * @param model
     * @return
     */
    @RequestMapping(value = "/show",method = RequestMethod.GET)
    public String showList(Model model){
        System.out.println(model.containsAttribute("list")); //true
        return "home";
    }

View Code

1、MyCAT原理

哲学原理 11

MyCAT主要是通过对SQL的掣肘,然后经过一定规则之分片解析、路由于分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将回来的结果召开适当处理回来给客户端。

哲学原理 12

  

2、MyCAT功能
(1)数据库分片(Sharding)

通过某种条件,将同一数据库被的多寡分散的蕴藏到几近单数据库被,已达到疏散单台数据库设备负载的效应,这就算是数据库分片。
a.水平拆分
同样张表的两样记录,根据表的有字段的某种规则拆分到差不多独数据库(主机)上,这既是程度拆分。
单库业务表可能会见过度庞大,存在单库读写及储存瓶颈,这种状态可以由此水平拆分解决,水平拆分基本架构如下:

哲学原理 13

时不时因此水平拆分规则:
*ID
*日期
*特定字段取模

 优点:

*拆分规则抽象好,join操作基本可以数据库内做到
*不存在单库大数额,高并发的性能瓶颈
*应用端改造掉
*增进了系统稳定和负载能力

缺点:
*拆分规则难以抽象
*分片事务一致性难以解决
*数多次扩展难度以及维护量极大
*跨库join性能比差

b.垂直拆分
差的表切分至不同之数据库(主机)上,这即是垂直拆分。
一般以作业表展开归类,划分也歧之作业、模块库,耦合度越没有,越易做垂直拆分,垂直拆分基本架构如下:

哲学原理 14

垂直拆分注意点:
跨库Join,采用共享数据源或分库接口调用,根据资源和数量规模、负载而定

优点:
*拆分后工作清晰,拆分规则明确
*网内结成或扩大容易
*数据库维护简单

缺点:
*一对业务表无法Join,只能通过接口方式解决,提高了网复杂度
*被各国种业务不同之限制在单库性能瓶颈,不便于扩展和性能提高
*事务处理复杂

c.水平拆分和直拆分共同缺点
*分布式事务处理困难
*夸节点join困难
*扩数据源管理复杂

d.切分总则
*可知无切分的尽心不切分
*只要要切分,选择当的切分规则,提前计划好
*数据库切分尽量通过数量冗余或说明分组来下滑跨库join
*作业尽量采取少的多表join

(2)读写分离

 

(3)黑白名单限制

 

3、使用状况 

(1)单纯读写分离,此时布局最为简练,支持读写分离、主从切换
(2)分库分表,对记录超过1000万之阐发展开水平拆分,最充分支撑1000亿单表水平拆分
(3)多租户使用,每个应用一个数据库,但顺序只待连续MyCAT,程序不更改,实现多租户化
(4)报表系统,借歇MyCAT分表能力,处理大规模的表格统计
(5)替代Hbase,分析深数量
(6)海量实时数据查询

4、优缺点
优点:
(1)支持多种类型数据库的分片
(2)易扩展
(3)

缺点:

二、MyCAT安装
1、下载
官网地址:http://www.mycat.io/
下载地址:http://dl.mycat.io/1.6-RELEASE/
文档地址:http://www.mycat.io/document/Mycat\_V1.6.0.pdf

三、MyCAT使用

 

季、MyCAT重要概念

 1、逻辑库(schema)

逻辑库是mycat中间件层配置的应和实际一个还是多单业务数据库集群构成。

哲学原理 15

2、逻辑表(table)
a.逻辑表是mycat切分到差不多个数据库或者不切分对应用程序显示的合并的阐发。
b.分片表是原始的大表,经过分片,分布于不同数据库、相同数据库的保存相同表结构,但数量不同的表。
c.非分片表是不做切分的阐明。
d.ER表基于E-R关系分片策略,子表记录与所涉的父表记录存放于与一个数额分片上,即子表依赖让父表,通过表分组保证数据join不见面跨库操作。
e.全局表,业务系统遭到生成不怪、数据量不大(十万以下),但以需要经常提到的表明,mycat采用冗余在各个节点一个卖来形成。

3、分片节点(dataNode)
数据库分片后,一个大表被切分到不同的分片数据库及,每个表分片所在的数据库就是分片节点。

4、分片主机(dataHost)
分片节点所在的服务器,数据切分后,每个分片节点不自然都见面占据一令服务器,同一个分片服务器可能存储多个分片节点,尽量要读写压力大之分片节点均的放在不同的节点主机上。

5、分片规则(rule)
依照某种业务规则把多少分至某某分片节点上之条条框框,就是分片规则。(分片规则不行主要,直接控制继续数据处理复杂度)

6、全局序列号(sequence)
当数据库分片后,原有的主键约束在分布式条件下无法运用,因此用引入外部体制保证数据唯一代表,这种保证全局的数额唯一象征机制就算是大局序列号(sequence)。

7、多租户
大多用户的条件共用同之网、程序组件,并且保证每用户中数的隔离性。
a.一个用户一个数据库,隔离级别高、安全性最好,费用最高
b.共享数据库,隔离数据架构,每个用户一个schema
c.共享数据库,共享数据架构,共享database、schema,通过表tenantID区分租户数据

 

五、MyCAT附录
1、OLAP和OLTP对比

2、关系型和非关系型数据库对比

3、

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图