温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Spring声明式事务是什么

发布时间:2021-09-24 17:53:59 来源:亿速云 阅读:181 作者:柒染 栏目:开发技术

这期内容当中小编将会给大家带来有关Java Spring声明式事务是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    项目结构:

    Java Spring声明式事务是什么

    表结构:

    Java Spring声明式事务是什么

    Java Spring声明式事务是什么

    基于xml的声明式事务配置

    IAccountDao.java:

    package tx.dao; import java.math.BigDecimal; public interface IAccountDao {     void add(String name, BigDecimal money);     void sub(String name, BigDecimal money); }

    AccountDaoImpl.java:

    package tx.service.impl; import tx.dao.IAccountDao; import tx.service.IAccountService; import java.math.BigDecimal; public class AccountServiceImpl implements IAccountService {     private IAccountDao accountDao;     public void setAccountDao(IAccountDao accountDao) {         this.accountDao = accountDao;     }     @Override     public void tran(String from, String to, BigDecimal money) {         accountDao.sub(from, money);         accountDao.add(to, money);     } }

    IAccountService.java:

    package tx.service; import java.math.BigDecimal; public interface IAccountService {     void tran(String from, String to, BigDecimal money); }

    AccountDaoImpl.java:

    package tx.dao.impl; import org.springframework.jdbc.core.JdbcTemplate; import tx.dao.IAccountDao; import java.math.BigDecimal; public class AccountDaoImpl implements IAccountDao {     private JdbcTemplate jdbcTemplate;     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {         this.jdbcTemplate = jdbcTemplate;     }     @Override     public void add(String name, BigDecimal money) {         jdbcTemplate.update("update account set balance = balance + ? where name = ? ", money.toString(), name);     }     @Override     public void sub(String name, BigDecimal money) {         jdbcTemplate.update("update account set balance = balance - ? where name = ? ", money.toString(), name);     } }
    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns:tx="http://www.springframework.org/schema/tx"        xmlns:aop="http://www.springframework.org/schema/aop"        xsi:schemaLocation="        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd        ">     <!--配置数据源-->     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">         <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>         <property name="username" value="root"/>         <property name="password" value="19834044876"/>         <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>     </bean>     <!--创建事务管理器-->     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">         <!--注入数据源-->         <property name="dataSource" ref="dataSource"/>     </bean>     <!--配置jdbcTemplate对象-->     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">         <!--注入dataSource-->         <property name="dataSource" ref="dataSource"/>     </bean>     <!--将JdbcTemplate注入到AccountDao中-->     <bean id="accountDao" class="tx.dao.impl.AccountDaoImpl">         <property name="jdbcTemplate" ref="jdbcTemplate"/>     </bean>     <!--将AccountDao注入到AccountService中-->     <bean id="accountService" class="tx.service.impl.AccountServiceImpl">         <property name="accountDao" ref="accountDao"/>     </bean>     <!--配置事务通知-->     <tx:advice id="txAdvice">         <!--配置事务参数-->         <tx:attributes>             <!--指定哪些方法上面添加事务-->             <tx:method name="tran"/>  <!-- name="*", name="tran*", name="*tran", ... -->         </tx:attributes>     </tx:advice>     <!--配置切入点和切面-->     <aop:config>         <!--配置切入点-->         <aop:pointcut id="pointCut" expression="execution(* tx.service.IAccountService.*(..))"/>         <!--配置通知-->         <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>     </aop:config> </beans>
    ApplicationContext context = new ClassPathXmlApplicationContext("tx.xml"); IAccountService accountService = context.getBean("accountService", IAccountService.class); accountService.tran("小明", "小红", new BigDecimal(500));

    完全注解(零xml)方式配置

    IAccountDao.java:

    package tx.dao; import java.math.BigDecimal; public interface IAccountDao {     void add(String name, BigDecimal money);     void sub(String name, BigDecimal money); }

    AccountDaoImpl.java:

    package tx.dao.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import tx.dao.IAccountDao; import java.math.BigDecimal; @Repository public class AccountDaoImpl implements IAccountDao {     @Autowired     private JdbcTemplate jdbcTemplate;     @Override     public void add(String name, BigDecimal money) {         jdbcTemplate.update("update account set balance = balance + ? where name = ? ", money.toString(), name);     }     @Override     public void sub(String name, BigDecimal money) {         jdbcTemplate.update("update account set balance = balance - ? where name = ? ", money.toString(), name);     } }

    IAccountService.java:

    package tx.service; import java.math.BigDecimal; public interface IAccountService {     void tran(String from, String to, BigDecimal money); }

    AccountServiceImpl.java:

    package tx.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import tx.dao.IAccountDao; import tx.service.IAccountService; import java.math.BigDecimal; @Service @Transactional public class AccountServiceImpl implements IAccountService {     @Autowired     private IAccountDao accountDao;     @Override     public void tran(String from, String to, BigDecimal money) {         accountDao.sub(from, money);         accountDao.add(to, money);     } }

    TXConfig.java

    package tx.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import tx.service.IAccountService; import tx.service.impl.AccountServiceImpl; import javax.sql.DataSource; @Configuration @ComponentScan(basePackages = "tx") @EnableTransactionManagement public class TXConfig {     /**      * 配置数据源      */     @Bean     public DataSource getDataSource() {         DruidDataSource dataSource = new DruidDataSource();         dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false");         dataSource.setUsername("root");         dataSource.setPassword("19834044876");         dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");         return dataSource;     }     /**      * 创建事务管理器      */     @Bean     public DataSourceTransactionManager getTransactionManager() {         return new DataSourceTransactionManager(getDataSource());     }     /**      * 配置jdbcTemplate对象      */     @Bean     public JdbcTemplate getJdbcTemplate() {         return new JdbcTemplate(getDataSource());     }     @Bean(name = "accountService")     public IAccountService getAccountService() {         return new AccountServiceImpl();     } }
    ApplicationContext context = new AnnotationConfigApplicationContext(TXConfig.class); IAccountService accountService = context.getBean("accountService", IAccountService.class); accountService.tran("小明", "小红", new BigDecimal(500));

    事务参数

    Java Spring声明式事务是什么

    Java Spring声明式事务是什么

    no-rollback-for

    指定碰到哪些异常不需要回滚

    rollback-for

    指定碰到哪些异常需要回滚

    read-only

    设置事务为只读事务

    timeout

    以秒为单位,设置事务超出指定时常后自动回滚

    默认为-1,即不管事务运行多久都不回滚

    isolation

    事务的隔离级别

    Java Spring声明式事务是什么

    Java Spring声明式事务是什么

    默认为DEFAULT,即使用当前数据库的隔离级别

    Java Spring声明式事务是什么

    propagation

    事务的传播行为

    Java Spring声明式事务是什么

    Java Spring声明式事务是什么

    默认为REQUIRED

    Java Spring声明式事务是什么

    上述就是小编为大家分享的Java Spring声明式事务是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI