Control declarativo de transacciones
1. Objetos relacionados con el control de transacciones mediante programación
1.1 PlatformTransactionManager
La interfaz PlatformTransactionManager es el administrador de transacciones de Spring, que proporciona los métodos que usamos comúnmente para manipular transacciones.
Nota:
PlatformTransactionManager es un tipo de interfaz, y las diferentes tecnologías de capa de Dao tienen diferentes clases de implementación. Por ejemplo, cuando la tecnología de capa de Dao es jdbc o mybatis: org.springframework.jdbc.datasource.DataSourceTransactionManager
Cuando la tecnología de la capa de Dao está en hibernación: org.springframework.orm.hibernate5.HibernateTransactionManager
1.2 Definición de transacción
TransactionDefinition es el objeto de información de definición de la transacción, que tiene los siguientes métodos:
2 control de transacciones declarativas basado en XML
2.1 ¿Qué es el control declarativo de transacciones?
La transacción declarativa de Spring, como su nombre indica, es utilizar un enfoque declarativo para manejar transacciones. La declaración mencionada aquí se refiere a la declaración en el archivo de configuración, y el procesamiento de transacciones declarativas en el archivo de configuración de Spring se usa en lugar de la transacción de procesamiento de código.
El papel del procesamiento de transacciones declarativas
-
La gestión de transacciones no invade los componentes desarrollados. Específicamente, los objetos de lógica empresarial no se darán cuenta de que están en la gestión de transacciones, y de hecho deberían estarlo, porque la gestión de transacciones es un servicio a nivel del sistema, no parte de la lógica empresarial. Si desea cambiar el plan de gestión de transacciones, solo debe necesita reconfigurar en el archivo de definición
-
Cuando no se requiere la administración de transacciones, puede eliminar el servicio de administración de transacciones siempre que modifique el archivo de configuración sin cambiar el código y volver a compilar, lo cual es extremadamente conveniente de mantener
Nota: La capa inferior del control de transacciones declarativas de Spring es AOP.
2.2 Implementación del control declarativo de transacciones
El control declarativo de transacciones es una cuestión clara:
-
¿Quién es el punto de corte?
-
¿Quién es la notificación?
-
¿Aspecto de configuración?
-
①Introducir el espacio de nombres tx
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
②Mejora de transacciones de configuración
<!--平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--事务增强配置-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
③Transacción de configuración AOP weaving
<!--事务的aop增强-->
<aop:config>
<aop:pointcut id="myPointcut" expression="execution(* com.itheima.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"></aop:advisor>
</aop:config>
④Código comercial de transferencia de control de transacciones de prueba
@Override
public void transfer(String outMan, String inMan, double money) {
accountDao.out(outMan,money);
int i = 1/0;
accountDao.in(inMan,money);
}
3 Control de transacciones declarativas basado en anotaciones
3.1 Usar anotaciones para configurar el control declarativo de transacciones
- Escribir AccoutDao
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void out(String outMan, double money) {
jdbcTemplate.update("update account set money=money-? where name=?",money,outMan);
}
public void in(String inMan, double money) {
jdbcTemplate.update("update account set money=money+? where name=?",money,inMan);
}
}
- Escribir AccoutService
@Service("accountService")
@Transactional
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
@Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)
public void transfer(String outMan, String inMan, double money) {
accountDao.out(outMan,money);
int i = 1/0;
accountDao.in(inMan,money);
}
}
- Escribir el archivo de configuración applicationContext.xml
<!—之前省略datsSource、jdbcTemplate、平台事务管理器的配置-->
<!--组件扫描-->
<context:component-scan base-package="com.itheima"/>
<!--事务的注解驱动-->
<tx:annotation-driven/>
3.2 Análisis de control de transacciones declarativo de configuración de anotaciones
①Utilice @Transactional para modificar las clases o métodos que necesitan control de transacciones. Los atributos disponibles para las anotaciones son los mismos que los métodos de configuración xml, como nivel de aislamiento, comportamiento de propagación, etc.
②La anotación se usa en la clase, luego todos los métodos de la clase usan el mismo conjunto de configuración de parámetros de anotación.
③En términos de métodos, diferentes métodos pueden usar diferentes configuraciones de parámetros de transacción.
④La unidad de anotación de la transacción que se abrirá en el archivo de configuración Xml <tx: annotation-drive />
3.3 Puntos de conocimiento
Puntos clave de configuración para el control declarativo de transacciones
-
Configuración del administrador de transacciones de la plataforma (modo xml)
-
Configuración de notificación de transacciones (@Configuración de anotaciones transaccionales)
-
Configuración basada en anotaciones de transacciones tx: basada en anotaciones /