Spring

Spring事务传播及数据库事务操作

此生再无相见时 提交于 2021-02-12 18:54:50
从Spring 事务配置说起   先看看Spring 事务的基础配置 <aop:aspectj-autoproxy proxy-target- class = " true " />   <bean id= " transactionManager "      class = " org.springframework.jdbc.datasource.DataSourceTransactionManager " >     <property name= " dataSource " ref = " dataSource " />   </bean>   <tx:annotation-driven transaction-manager= " transactionManager " />   <!-- 配置事务传播特性-->   <tx:advice id= " transactionAdvice " transaction-manager= " transactionManager " >     <tx:attributes>       <tx:method name= " add* " propagation= " REQUIRED "       rollback - for = " Exception,RuntimeException,SQLException "

读写分离很难吗?SpringBoot结合aop简单就实现了!

纵饮孤独 提交于 2021-02-12 18:50:44
点击上方 " 程序员小乐 "关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Take chances, give everything, and leave with no regrets. 抓住机会,全心付出,不留遗憾的离开。 每日掏心 话 生命中遇到的每一个人都是有理由的,之前所有的错失与遗憾,都只是为了遇到最终那个对的人。 来自 : 鄙人薛某 | 责编:乐乐 链接:juejin.im/post/5ddcd93af265da7dce3271de 程序员小乐(ID:study_tech) 第 864 次推文 图源:百度 往日回顾: 如何使用 Nginx 优雅的限流 正文 前言 入职新公司到现在也有一个月了,完成了手头的工作,前几天终于有时间研究下公司旧项目的代码。在研究代码的过程中,发现项目里用到了Spring Aop来实现数据库的读写分离,本着自己爱学习(我自己都不信…)的性格,决定写个实例工程来实现spring aop读写分离的效果。 环境部署 数据库:MySql 库数量:2个,一主一从 关于mysql的主从环境部署,可以参考: https://juejin.im/post/5dd13778e51d453da86c0e6f 开始项目 首先,毫无疑问,先开始搭建一个SpringBoot工程,然后在pom文件中引入如下依赖: <

读写分离很难吗?SpringBoot结合aop简单就实现了

独自空忆成欢 提交于 2021-02-12 18:50:22
点击上方“ 方志朋 ”,选择“ 设为星标 ” 回复” 666 “获取新整理的面试文章 作者:鄙人薛某 juejin.im/post/5ddcd93af265da7dce3271de 前言 入职新公司到现在也有一个月了,完成了手头的工作,前几天终于有时间研究下公司旧项目的代码。在研究代码的过程中,发现项目里用到了Spring Aop来实现数据库的读写分离,本着自己爱学习(我自己都不信…)的性格,决定写个实例工程来实现spring aop读写分离的效果。 环境部署 数据库:MySql 库数量:2个,一主一从 关于mysql的主从环境部署,可以参考: https://juejin.im/post/5dd13778e51d453da86c0e6f 开始项目 首先,毫无疑问,先开始搭建一个SpringBoot工程,然后在pom文件中引入如下依赖: < dependencies > < dependency > < groupId > com.alibaba </ groupId > < artifactId > druid-spring-boot-starter </ artifactId > < version > 1.1.10 </ version > </ dependency > < dependency > < groupId > org.mybatis.spring.boot <

读写分离很难吗?springboot结合aop简单就实现了

故事扮演 提交于 2021-02-12 18:16:41
前言 入职新公司到现在也有一个月了,完成了手头的工作,前几天终于有时间研究下公司旧项目的代码。在研究代码的过程中,发现项目里用到了Spring Aop来实现数据库的读写分离,本着自己爱学习(我自己都不信…)的性格,决定写个实例工程来实现spring aop读写分离的效果。 环境部署 数据库:MySql 库数量:2个,一主一从 关于mysql的主从环境部署,参考地址: https://juejin.im/post/5dd13778e51d453da86c0e6f 开始项目 首先,毫无疑问,先开始搭建一个SpringBoot工程,然后在pom文件中引入如下依赖: < dependencies > < dependency > < groupId > com.alibaba </ groupId > < artifactId > druid-spring-boot-starter </ artifactId > < version > 1.1.10 </ version > </ dependency > < dependency > < groupId > org.mybatis.spring.boot </ groupId > < artifactId > mybatis-spring-boot-starter </ artifactId > < version > 1.3.2 </

为什么要阅读Spring源码

痞子三分冷 提交于 2021-02-12 13:02:31
阅读《Spring技术内幕》是因为面试官会提问关于Spring的内容,会提问怎么使用,还有实现的原理,那么为什么面试官要问这些东西呢? 其实,学习编程不是学习配置东西,然后写编程套路。写程序最重要的是你能心中有自己的一套架构思路,比如我现在就没有写Java的项目了。我设计了一个Python的测试系统用来测试我们的服务。一个好的架构和一个差的架构区别很大的,好的架构,简单优雅。要设计架构就要阅读架构。 如果你有认真好好的看《Java编程思想》,你应该能认识到,里面一句深刻的一句话,“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。 读源码三问:“为什么要有这样的架构”,“他是什么样子的”,“他是怎么工作的”。 首先,我们来说说,IoC容器。 IoC容器存在的原因在于对象的解耦,有了简单来说就是我们自己定义我们要怎么去实现对象中调用的接口。其实我们不用去看他的实现,我们先假想,我们怎么实现它。嗯,嗯嗯嗯。嗯嗯嗯嗯嗯嗯,有了。 我们做的不就是容器嘛(丁亮说,我们用新的方式来管理类,那就是容器),我们就定义一个读文件的方法,然后把读到的内容用加载器进行加载,然后放在一个容器里面,名字对应Object(黄勇说,我就是这样做smart框架的),然后开始注入了,我们定义了注入类的位置和被注入类的位置(约定优于配置)。我们就去容器中获取。我们想象这样是不是挺完美的。好像是的。 好了

笔记-JavaWeb学习之旅5

谁说胖子不能爱 提交于 2021-02-12 13:00:23
CP30的演示 package cn.itcast.datasourcejdbc; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class C3P0Demo2 { public static void main(String[] args){ //创建连接池对象,使用多态 //不指定配置文件的名称,会连接默认配置 DataSource ds = new ComboPooledDataSource(); //使用getConnection方法获取连接 try{ //归还连接对象演示 //文件默认配置了10个连接 for(int i = 0 ; i <10 ; i++){ Connection c = ds.getConnection(); //i<5个的话不会报错 //i<11的话会报异常 An attempt by a client to checkout a Connection has timed out. System.out.println(i+""+c); //现在归连接 if(i==5){ c.close(); //运行正常

spring cloud gateway 之限流篇

。_饼干妹妹 提交于 2021-02-12 11:55:35
转载请标明出处: https://www.fangzhipeng.com 本文出自 方志朋的博客 在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方面是为了防止网络攻击。 常见的限流方式,比如Hystrix适用线程池隔离,超过线程池的负载,走熔断的逻辑。在一般应用服务器中,比如tomcat容器也是通过限制它的线程数来控制并发的;也有通过时间窗口的平均速度来控制流量。常见的限流纬度有比如通过Ip来限流、通过uri来限流、通过用户访问频次来限流。 一般限流都是在网关这一层做,比如Nginx、Openresty、kong、zuul、Spring Cloud Gateway等;也可以在应用层通过Aop这种方式去做限流。 本文详细探讨在 Spring Cloud Gateway 中如何实现限流。 常见的限流算法 计数器算法 计数器算法采用计数器实现限流有点简单粗暴,一般我们会限制一秒钟的能够通过的请求数,比如限流qps为100,算法的实现思路就是从第一个请求进来开始计时,在接下去的1s内,每来一个请求,就把计数加1,如果累加的数字达到了100,那么后续的请求就会被全部拒绝。等到1s结束后,把计数恢复成0,重新开始计数。具体的实现可以是这样的:对于每次服务调用,可以通过AtomicLong#incrementAndGet(

索引+sql优化

本秂侑毒 提交于 2021-02-12 11:01:37
索引的概念 : 索引是提高查询速度的一种手段。 索引有很多种,以下是索引树的结构 要求查询出薪资大于 5000 的雇员信息,只要在树中找到 5000 的节点,直接查询该节点右边的数据即可,左边就不用管了,这样提高了查询的效率。 将数据按照索引数据的方式保存需要先创建索引。 基本语法: CREATE INDEX 索引名 ON 数据表(字段名) ; 删除索引: DROP INDEX 索引名 ; 注意:系统默认主键使用索引。 复合索引 一个索引在多个字段上创建,就是一个索引作用于多个字段。 例如: CREATE INDEX 索引名 ON 数据表(字段 1 ,字段 2 ) ; 注意:查询数据使用字段 2 ,此时使用的是全表扫描模式,查询数据使用字段 1 ,此时使用的是索引扫描模式。(此现象叫做索引的 最左原则 ) 在 Oracle 中使用了多个字段,并且是 AND 连接的条件,那么字段的顺序不影响扫描的方式(索引扫描),如果是 mysql 则需要和复合索引的字段顺序一致。使用 OR 连接条件会导致索引失效,应该使用 UNION ALL 代替 OR 查询。 总结: 索引不能随便用。如果一张数据表更新频率太高,更新数据之后需要重新创建索引,这一过程很耗费性能。 Sql 的优化 *(面试题) 1、 对查询进行优化,要尽量避免全表扫描,首先应考虑在进行条件判断的字段上创建索引。

Shiro入门学习与实战(一)

强颜欢笑 提交于 2021-02-12 09:56:39
一、概述 1、Shiro是什么?   Apache Shiro是java 的一个安全框架,主要提供:认证、授权、加密、会话管理、与Web集成、缓存等功能,其不依赖于Spring即可使用;   Spring Security(Oauth2)也是一个开源的权限框架,但其依赖于Spring运行,功能相对强大;而Shiro相对独立,不依赖于Spring,使用简单、灵活,所以我选择Shiro学习。哈哈~ 2、Shiro基本功能 ①Authentication(音标: [ɔːˌθentɪˈkeɪʃn] )   身份认证,验证用户是不是拥有相应的身份。 ②Authorization(音标:[ˌɔːθərəˈzeɪʃn])   授权即权限验证,验证某个已认证的用户是否拥有某个权限(比如接下来我要实现的:不用用户拥有不用的菜单树) ③Session Management   会话管理,在用户登录后,退出之前,所有信息都存在于会话中(这里可以用于sso单点登录) ④Crptography   加密,保护数据的安全性(比如密码加密存储到数据库,而不是明文存储) ⑤Web支持   非常容易集成到Web环境 ⑥Caching   缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率 ⑦Concurrency   Shiro支持多线程应用宝并发验证,(即在一个线程中开启另一个线程