Java中事务开启是不是就是mysql加锁了?
最近公司里dubbo分布式框架,涉及java调存储过程,才分清Java事务和数据库事务是分开的,Java事务只能保证Java应用涉及到的事务提交或者回滚,数据库事务能保证着数据库事务提交或者回滚。由于定时任务调度超时,导致超时重试,结果产生重复数据
Java开发如果不让使用spring框架,会有多大影响?
我从事java开发已经多年了,有幸回答你的问题!
就我的经验来看,学习JAVA不一定要学spring,你可以开发小应用,你可以做图形界面,你可以做android开发!但如果你是做服务器开发,那么spring是你必须的选择!
我JAVA从业经验中,经历了SSH,SSM,SpringMVC+M,Spring boot和Spring cloud,等等框架,核心都是Spring,都离不开spring!
spring的妙用有哪些呢?从spring设计伊始就是为了解决对象的创建和管理!后来功能愈发的完善,变成了垄断性的框架!
1,控制反转(IOC)的思想,运用依赖注入(DI)的技术,让我们管理对象的时候再也不用new new new了!防止大量对象的创建!防止组件之间的强依赖!
2,运用了大量的反射,代理,工厂方法,是我们学习编码技巧的最好模范!
3,AOP(面向切面编程)技术,能够使用少量代码搭建完美的的日志管理,权限管理,运行期监控!
4,低侵入性!让我们可以轻松耦合诸如struts,hibernate,mybatis,redis,memcache,amoeba,actibemq等包括数据层,控制层,缓存,数据中间件,消息中间件的中间件!
5,低耦合特性:通过依赖注入特性,可以借助spring容器创建,管理对象,防止在代码中硬性注入对象,防止对象混乱!
6,通过@transaction注解,可以实现声明式事务,在注解中的代码都可以在一个事务当中,实现最简单的事务控制,异常回滚!
7,spring源码使用了诸如工厂,单例,代理,构造者,策略,模板等多种设计模式,是JAVA程序员写出优良代码的不二范例!
8,提供大量诸如beanUtils,qstringUtils等优秀工具类!
.....
但是spring 4之前,用spring开发web配置过于繁杂,笨重!让程序员不用专注于业务代码开发,spring boot ,spring cloud由此诞生,将spring再次推向辉煌神坛!
spring cloud家族:
1,web开发:使用web-starter将web开发精炼到极其简单的地步,只需简单的几行代码就可以实现一个服务!
2,服务发现和治理:使用eureka-starter将服务注册到指定服务器上,对于健康,宕机的服务进行自动管理!
3,熔断器:Hystrix用于诸如遇到雪崩效应,不断大量重试等自动服务熔断!
4,网关:使用zuul实现网关路由!
5,配置集中化管理:使用config实现配置文件的统一管理和热部署!
.......
可以说spring是JAVA程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!
作为JAVA工程师,你用spring吗?
那要看你是开发什么了。spring是个应用级的框架,我们项目大多是业务导向的,所以感觉spring无所不在。如果你是做底层呢,你去看看tomcat源码,netty源码,jdk源码,有spring啥事儿?归根到底,是要拓宽视野,想清楚定位[灵光一闪]
拦截映射可以利用ConcurrentHashMap<>+反射动态代理替换springmvc,自定义个简单的beanFactory工厂,用ConcurrentHashMap存储bean,自定义注解,启动时扫包,注入,注意循环依赖。互联网巨头,都有实力造一个,但是何必自己造轮子呢,😂
MyBatis如何理解事物控制呢?
什么是事务
一、概念
事务指的是逻辑上的一组操作,这一组操作要不同时成功,要不同时失败,只要这一组操作里有一个失败,意味着这一组都失败 ---同生共死
二、事务的管理
(MySQL数据库事务默认是自动提交,Oracle数据库事务默认是不自动提交)
(一)dos命令行管理事务1.手动开启事务start tansaction --开启事务excute 多条 sqlcommit 提交 / rollback 回滚2.设置一个自动提交参数show variables like '%commit%' --查看与commit相关参数set autocommit = 0; -- 将autocommit参数设置为OFF.
(二)JDBC管理事务JDBC的事务的管理的APIsetAutoCommit(boolean autoCommit); --是自动提交还是手动commit(); --提交事务rollback(); --回滚
(三)创建表,插入3条数据create table account(id int primary key auto_increment,name varchar(20),money double);
insert into account values (null,'张森',10000);insert into account values (null,'凤姐',10000);insert into account values (null,'如花',10000)
内省1.用来获取JavaBean的属性及属性的get和set方法2.JavaBean就是一个满足了特定格式的Java类
三、事务特性
原子性:强调事务的不可分割一致性:强调的是事务的执行的前后,数据的完整性要保持一致隔离性:一个事务的执行不应该受到其他事务的干扰持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库
四、如果不考虑隔离性,会引发一些安全性问题
1、读问题脏读:一个事务读到另一个事务还没有提交的数据不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询数据不一致虚读/幻读:一个事务读到另一个事务已经insert数据,导致当前事务中多次查询结果不一致
2、写问题引发两类丢失更新
五、解决引发的读问题
设置事务的隔离级别read uncommitted :未提交读。脏读,不可重复读,虚读都可能发生read committed :已提交读。避免脏读,不可重复读和虚度有可能发生repeatable read :可重复读。避免脏读和不可重复读,虚读可能发生serializable :串行化的。避免脏读,不可重复读,虚读的发生select @@tx_isolation; 查看隔离级别set session transaction isolation level 级别; 设置隔离级别