aop的简单使用
简介
AOP 的全称是“Aspect Oriented Programming”,即面向切面编程,和 OOP(面向对象编程)类似,也是一种编程思想
AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。主要作用是分离功能性需求和非功能性需求,使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。
AOP 的作用就是保证开发者在不修改源代码的前提下,为系统中的业务组件添加某种通用功能AOP 就是代理模式的典型应用。
目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ
Spring AOP 是基于 AOP 编程模式的一个框架,它能够有效的减少系统间的重复代码,达到松耦合的目的。Spring AOP 使用纯 Java 实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类植入增强的代码。有两种实现方式:基于接口的 JDK 动态代理和基于继承的 CGLIB 动态代理
AspectJ 是一个基于 Java 语言的 AOP ...
mysql创建定时任务
需求:定时删除三个月之前的数据
1.编写需要执行的sql语句
123456789101112## 因为表数据过大(大约2亿数据),需要先查询三个月之前的id节点,增加查询速度select MAX(id) from other_log_info where DATE_FORMAT(createtime,'%Y-%m-%d') = DATE_SUB(CURDATE(),INTERVAL 3 MONTH);## 查询的sql一次不能删除太多数据,防止锁表select * from other_log_info where id < (select MAX(id) from other_log_info where DATE_FORMAT(createtime,'%Y-%m-%d') = DATE_SUB(CURDATE(),INTERVAL 3 MONTH)) LIMIT 0,1000## 由于delete不能直接删除子查询表中的数据,必须用过嵌套一层的方式来解决## 第二种执行方式,如果对于sql比较熟悉,可以用存储过程的"游标& ...
自定义注解
简介注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理
元注解介绍元注解的作用就是负责注解其他注解,Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明
@Target
@Retention
@Documented
@Inherited
对应的参数详情说明见末尾
修饰符:访问修饰符必须为public,不写默认为pubic
关键字:关键字为@interface
注解名称: 注解名称为自定义注解的名称
注解内容:注解中内容,对注解的描述
以下内容采用枚举方式进行注解
1.定义枚举123456789101112131415161718192021222324252627282930313233343536373839public enum newChannelEnum { BVC("BVC","bvc_timeout&quo ...
数据库中间件
数据库中间件Cobar:阿里团队开发,已经多年没有维护更新
MyCat:基于Cobar二次开发,开源社区维护
OneProxy:不开源的商业中间件专注性能和稳定性
KingShard:GO语言开发,在不断完善
Vitess:youtobe生产在使用,不支持MySql原生协议
Atlas:360团队基于MySqlProxy改写,高并发下不稳定
MaxScale:MaxScale是mariadb研发的中间件
MysqlRoute:MySql官方Oracle公司发布的中间件
ShardingJDBC:现在比较主流的中间件
SQL解析>查询优化>SQL路由>SQL改写>SQL执行>结果归并
mycat简单介绍
MyCat介绍
如今随着互联网的发展,数据的量级也是成指数式的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求,这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——MyCat 。
MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到”云”端,解决海量数据存储和业务规模迅速增长情况下的数据存储和访问的瓶颈问题 。
Mycat 背后是阿里曾经开源的知名产品——Cobar,Cobar 的核心功能和优势是 MySQL 数据库分片
相对于cobar的优势
对 cobar 的代码进行了彻底的重构,Mycat在I/O方面进行了重大改进, ...
ShardingJDBC简单介绍
ShardingJDBC介绍
ShardingJDBC是当当网研发的开源分布式数据库中间件,从 3.0 开始Sharding-JDBC被包含在 Sharding-Sphere中,之后该项目进入进入Apache孵化器,4.0版本之后的版本为Apache版本。
ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。
官方地址:https://shardingsphere.apache.org/document/current/cn/overview/
它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架
在 maven 的工程里面,我们使用它的方式是引入依赖,然后进行 ...
分库分表思想
随着单库中的数据量越来越大、数据库的查询QPS越来越高,相应的,对数据库的读写所需要的时间也越来越多。数据库的读写性能可能会成为业务发展的瓶颈。对应的,就需要做数据库性能方面的优化。
场景一:如果数据库的查询QPS【连接数】过高,就需要考虑拆库,通过分库来分担单个数据库的连接压力。比如,如果查询QPS为3500,假设单库可以支撑1000个QPS的话,那么就可以考虑拆分成4个库,来分散查询连接压力。
场景二:如果单表数据量过大,就需要考虑分表,当数据量超过一定量级后,无论是对于数据查询还是数据更新,在经过索引优化等纯数据库层面的传统优化手段之后,还是可能存在性能问题。这是量变产生了质变,这时候就需要去换个思路来解决问题,比如:从数据生产源头、数据处理源头来解决问题,既然数据量很大,那我们就来个分而治之,化整为零。这就产生了分表,把数据按照一定的规则拆分成多张表,来解决单表环境下无法解决的存取性能问题。
场景三:如果单数据库宕机,可能所有数据都会丢失,就需要考虑数据拆分
单库部署情况下,如果数据库宕机,那么故障影响就是100%,而且恢复可能耗时很长。
如果我们拆分成2个库,分别部署在 ...
定时任务使用总结
相信定时任务大家都不陌生,可能在个人项目中使用定时任务会比较少,但是在业务复杂的公司中,定时任务是不可或缺的一部分,有时候也可以贯穿整个项目的流程运转。
什么是定时任务crond类似于我们平时生活中的闹钟,可以定时叫你起床,而在项目中就是定时执行一段指定的代码
为什么要使用crond呢
1.如果对于一些数据实时性要求没那么高,我们可以把数据提前丢到缓存中,这个时候就需要使用定时任务去跑了,比如每天凌晨3点定时把数据同步到缓存,错峰同步避开白天人流量大的时候消耗资源
2.比如凌晨2点有抢购接口/或者业务开关需要进行变更开启,我们可以使用定时任务去进行变更,不用人为去守着变更,而且执行时间更准确(可以滚去睡大觉.jpg)
3.还可以进行数据的定时备份,比如备份配置文件,防止宕机的时候配置文件的恢复等等
定时任务实现方式1.Thread各位亲爱的朋友,没错,Thread真的可以做定时任务.
如果你去看过一些定时任务框架的源码,它们的底层也会使用Thread类(需要注意用try……catch捕获异常,否则出现异常,就直接退出循环)
123456789101112public static vo ...
ip地址白名单校验
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220 ...
java文件用GZip压缩gz
描述:利用Gzip进行文件压缩
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971 ...