标签:代码 nsis 外部 app ons 失败 string ota change
本文使用的是spring + mybatis,数据库用的是MySql,说事务的传播行为之前先介绍一个SSM开发中很好用的一个IDEA插件 --- Easy Code
Easy Code插件
该插件用来基于数据库表来生成开发中用到的entiry类、mapper接口、mapper.xml等代码,免去了手工定义的麻烦
使用方法:
1、IDEA连接mySql,选中数据库表然后右键,选择EasyCode -> Generate Code
2、在弹出的对话框中填写要生成的代码及所在的包名
spring事务
编程式事务管理
使用TransactionTemplate或者PlatformTransactionManager ----- 这种方式没怎么用过,不知道咋写例子
声明式事务管理
声明式事务基于AOP实现,本质是对方法进行拦截,在方法执行前植入或者创建事务,在方法执行后根据执行结果做事务的提交或者回滚;
用法:
1、声明c3p0数据源为bean
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> <property name="user" value="${user}" /> <property name="password" value="${password}" /> <property name="driverClass" value="${driver}" /> <property name="jdbcUrl" value="${url}" /> </bean>
2、声明一个基于数据源的事务管理器
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
3、配置声明支持事务注解
<tx:annotation-driven transaction-manager="transactionManager" />
4、方法使用@Transactional注解修饰
注意:spring手册里明确写道,@Transactional注解用于修饰公共方法并且被外部代码类调用的时候事务才生效;如果修饰私有或者保护方法,不会报错,但是事务也不会生效;原因:transactional标签用于将对应包装的bean设置成一个新的代理bean对象供外部使用,就是说外部调用这个proxy bean的公共方法时先会调用开启事务等的切面工作,若设置成私有方法只能类内用this指针调用,这样被调用的bean是其本身,不是proxy对象,因此没有transactional切面的意义
举例:
public void createUser(@NonNull TableUser tableUser) { TableUserDao tableUserDao = sqlSessionTemplate.getMapper(TableUserDao.class); createUser(tableUser, tableUserDao); } @Transactional private void createUser(TableUser tableUser, TableUserDao tableUserDao) { tableUserDao.insert(tableUser); throw new RuntimeException(); }
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean.xml");
TableUserService service = context.getBean(TableUserService.class);
service.createUser(TableUser.builder().id(2).age(22).name("bale2").build());
}
main方法执行后,可以看到方法抛出异常,但是数据没有回滚:
如果非要用在private修饰的方法上,可以结合AspectJ来实现
spring事务传播行为
spring事务隔离级别
标签:代码 nsis 外部 app ons 失败 string ota change
原文地址:https://www.cnblogs.com/sniffs/p/13221658.html