栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring5事务操作、框架新功能日志(下)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring5事务操作、框架新功能日志(下)

积一时之跬步 , 臻千里之遥程

千里的路程都是从一步一步开始走的,无边无际的江河都是从一条条小溪汇聚而成的!「凡事不是一蹴而就的」

一分耕耘,一分收获
希望在这里你们能收获到你们想要的。 「共勉」

文章目录
  • 事务
    • 事务概念
      • 1.什么是事务
      • 2.事务四个特性(ACID)
    • 事务操作(搭建事务操作环境)
    • 事务操作(Spring 事务管理介绍)
    • 事务操作(注解声明式事务管理)
    • 事务操作(声明式事务管理参数配置)
    • 事务操作(XML声明式事务管理)
    • 事务操作(完全注解声明式事务管理)
  • Spring 5 框架新功能
    • 1.简介
    • 2.Spring5框架自带了通用的日志封装
    • 3.Spring5框架核心容器支持@Nullable注解
    • 4.Spring5核心容器支持函数式风格GenericApplicationContext
    • 5.Spring5 支持整合JUnit5

事务 事务概念 1.什么是事务

(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都会失败

(2)经典场景:银行转账

*Lucy转账100元给Mary

*Lucy少100元,Marry多100元

2.事务四个特性(ACID)

(1)原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

(2)一致性(Correspondence):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

(3)隔离性(Isolation):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆, 必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。

(4)持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

事务操作(搭建事务操作环境)

1.创建数据库表,添加记录

2.创建service,搭建dao,完成对象创建和注入关系

(1)service注入dao,在dao注入JdbcTemplate,在JdbcTemplate注入DataSource

Dao类:

@Repository
public class UserDaoImpl implements UserDao{

	
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
}

Service类:

@Service
public class UserService {

	//注入dao
	@Autowired
	private UserDao userDao;
}

3.在到创建两个方法:多钱和少钱的方法,在service创建方法(转账的方法)

@Service
public class UserService {

	//注入dao
	@Autowired
	private UserDao userDao;
	
	//转账的方法
	public void accounMoney() {
		//lucy少100
		userDao.reduceMoney();
		
		//mary多100
		userDao.addMoney();
	}
}

4.上面代码,如果正常执行是没有问题的,如果运行中出现异常,就会出现问题

(1)上面的问题如何解决?

*使用事务进行解决

(2)事务操作的过程(基本流程,这是编程式事务管理)

事务操作(Spring 事务管理介绍)

1.事务添加到JavaEE三层结构里面Service层(业务逻辑层)

2.在Spring进行事务管理操作

(1)有两种方式:编程式事务管理(不常用)和声明式事务管理(使用)

3.声明式事务管理

(1)基于注解方式

(2)基于xml配置文件方式

4.在Spring进行声明式事务管理,底层使用AOP原理

5.Spring事务管理API

(1)提供一个接口,代表事务管理,这个接口针对不同框架提供不同的实现类

事务操作(注解声明式事务管理)

1.在spring配置文件配置事务管理器


	
	
	
	

2.在spring配置文件,开启事务注解

(1)在spring配置文件引入名称空间tx



(2)开启事务注解


	

3.在service类上面(获取service类里面方法上面)添加事务注解

(1)@Transactional,这个注解可以添加到类上面,也可以添加到方法上面

(2)如果把这个注解添加到类上面,这个类里面所有的方法都添加事务

(3)如果把这个注解添加到方法上面,这个方法添加了事务

@Service
@Transactional
public class UserService {
事务操作(声明式事务管理参数配置)

1.在service类上面添加注解@Transactional,在这个注解里面可以配置事务相关参数

2.propagation:事务传播行为

(1)多事务方法直接进行调用,这个过程中事务是如何进行管理的(主要前两个)

@Service
@Transactional(propagation = Propagation.REQUIRED)
public class UserService {

3.isolation:事务隔离级别

(1)事务里面有一个特性成为隔离性,多事务操作之间不会产生影响,不考虑隔离性产生很多问题

(2)有三个读的问题:脏读,不可重复读,虚(幻)读

(3)脏读:一个未提交的事务读到了一个未提交的事务

(4)必可重复读:一个未提交的事务读到了一个提交的事务的修改数据

(5)虚(幻)读:一个未提交的事务读到了一个提交的事务添加的数据

(6)通过设置事务隔离级别,解决读问题(默认:可重复度)

@Transactional(propagation = Propagation.REQUIRED,
isolation = Isolation.REPEATABLE_READ)

4.timeout:超时时间

(1)事务需要在一定时间内进行提交,如果不提交进行回滚

(2)默认值是-1,设置时间一秒为单位进行计算

5.readOnly:是否只读

(1)读:查询操作,写:添加修改删除操作

(2)readOnly默认值是false,表示可以进行查询,可以添加修改操作

(3)设置readOnly值为true,设置成true之后,只能查询

6.rollbackFor:回滚

(1)设置查询那些异常进行事务回滚

7.noRollbackFor:不回滚

(1)设置那些异常不进行事务回滚

事务操作(XML声明式事务管理)

在spring配置文件中进行配置

第一步:配置事务管理器

第二步:配置通知

第三步:配置切入点和切面





	
	
	
	
		
		
		
		
	

	
	

	
	
		
		
	

	
	
		
		
	

	
	
		
		
			
			
		
	
	
	
		
		
		
	

事务操作(完全注解声明式事务管理)

1.创建配置类,使用配置类代替xml配置文件

@CacheConfig//配置类
@ComponentScan(basePackages = "pdsu.edu")
@EnableTransactionManagement//开启事务

public class txConfig {

	//创建数据库的连接池
	@Bean
	public DruidDataSource getDruidDataSource() {
		DruidDataSource data =new DruidDataSource();
		data.setDriverClassName("com.mysql.jdbc.Driver");
		data.setUrl("jdbc:mysql://localhost:3306/t_user");
		data.setUsername("root");
		data.setPassword("root");
		return data;
	}
	//创建JdbcTemplate对象
	public JdbcTemplate getJdbcTemple(DruidDataSource data) {
		//到IOC容器中根据类型找到DataSource
		JdbcTemplate jdbcTemplate =new JdbcTemplate();
		//注入data
		jdbcTemplate.setDataSource(data);
		return jdbcTemplate;
	}
	//创建事务管理器对象
	@Bean
	public DataSourceTransactionManager getDataSourceTransactionManager(DruidDataSource data) {
		DataSourceTransactionManager tran = new DataSourceTransactionManager();
		tran.setDataSource(data);
		return tran;		
	}	
}
Spring 5 框架新功能 1.简介

整个Spring5框架的代码基于Java8,运行兼容 JDK9,许多不建议使用的类和方法在代码库中使用

2.Spring5框架自带了通用的日志封装

(1)Spring5已经移除了Log4jConfigListener,官方建议使用Log4j2

(2)Spring5框架整合Log4j2

第一步引入jar包

第二步 创建log4j2.xml配置文件(名字固定)

log4j2.xml





	
	
		
		
			
			
		
	
	
	
	
		
			
		
	

3.Spring5框架核心容器支持@Nullable注解

(1)@Nullable注解可以使用在方法上面,属性上面,参数上面,表示方法返回可以为空,属性值可以为空,参数值可以为空

(2)注解用在方法上面,方法返回值可以为空

@Nullable
String getId();

(3)注解使用在方法参数里面,方法参数可以为空

(4)注解使用在属性上面,属性值可以为空

@Nullable
private String bookName;
4.Spring5核心容器支持函数式风格GenericApplicationContext
//函数式风格创建对象,交给Spring进行管理
	public static void testGenericApplicationContext() {
		//1.创建GenericApplicationContext对象
		GenericApplicationContext con =new GenericApplicationContext();
		//2.调用con的方法对象注册
		con.refresh();
		con.registerBean("user1",User.class, ( ) -> new User());
		//3.获取在spring注解的对象
		User user = (User)con.getBean("user1");
		System.out.println(user);
	}
5.Spring5 支持整合JUnit5

(1)整合JUnit4

第一步引入Spring相关jar包

第二步创建测试类,使用注解方式完成

@RunWith(SpringJUnit4ClassRunner.class)//单元测试类
@ContextConfiguration("classpath:bean1.xml")//加载配置文件
public class JTest4 {

	@Autowired
	private static UserService uservice;
	
	@Test
	public static void test1() {
		uservice.accounMoney();
	}
}

(2)Spring5整合JUnit5

第一步引入JUnit5jar包

第二步创建测试类,使用注解完成

@ExtendWith(SpringExtension.class)
@ContextConfiguration("classpath:bean1.xml")
public class JTest5 {

	@Autowired
	private static UserService uservice;
	
	@Test
	public static void test1() {
		uservice.accounMoney();
	}
}

(3)可以使用一个复合注解代替上面两个注解完成整合

//@ExtendWith(SpringExtension.class)
//@ContextConfiguration("classpath:bean1.xml")

@SpringJUnitConfig(locations = "classpath:bean1.xml")

后续笔记会持续更新,希望大家给个一键三连!!!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362259.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号