spring tx事务实现

spring tx事务实现
anno 注解实现

在调用事务的类上 加上一个@Transactional注解

import com.zho.dao.IAccountDao;
import com.zho.domian.Account;
import com.zho.service.IAccountService;
import org.aspectj.lang.annotation.Around;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service("accountService")
@Transactional
public class AccountServiceImpl implements IAccountService {

    @Autowired
    private IAccountDao accountDao;



    @Override
    public Account findAccountById(int id) {
        return accountDao.findAccountById(id);

    }

    @Override
    public void transFor(String sourceName, String targetName, float money) {
        Account source = accountDao.findAccountByName(sourceName);
        Account target = accountDao.findAccountByName(targetName);
        source.setMoney(source.getMoney() + money);
        target.setMoney(target.getMoney() - money);
        accountDao.updateAccount(source);
//        int k = 1 / 0;
        accountDao.updateAccount(target);
        System.out.println("转账成功");
    }
}

创建一个事务类配置类

@Configuration
public class TransactionConfig {
	@Bean(name="transactionManager")
    public PlatformTransactionManager createTransactionManager(DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }
}
@Configuration
public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean(name = "jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name="dataSource")
    public DataSource createDataSource() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }
}

import org.springframework.context.annotation.*;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@ComponentScan("com.zho")
@Import({JdbcConfig.class,TransactionConfig.class})
@PropertySource("jdbcConfig.properties")
@EnableTransactionManagement
public class SpringConfiguration {
}

xml配置实现

还是需要一个事务配置 参数填充数据库源

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

配置通知

   <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" read-only="false"/>
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="pt" expression="execution(* com.zho.service.impl.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
    </aop:config>
Spring TX事务管理是Spring框架提供的一种管理事务的机制。Spring并不直接管理事务,而是通过提供多种事务管理器,将事务管理的职责委托给底层的持久化机制(如Hibernate或JTA等)来实现。 在Spring进行事务管理时,主要有两种方式:编程式事务管理和声明式事务管理。声明式事务管理是一种常用的方式,它通过使用注解或配置文件的方式来定义事务的边界和行为。 要使用Spring事务管理,首先需要引入相关的库。然后,根据具体的需求,可以使用注解式的方式来管理事务。例如,可以在需要进行事务管理的方法或类上添加@Transactional注解,该注解会自动处理事务的开启、提交或回滚等操作。 下面是一个使用Spring事务管理的示例代码: ```java package org.example; import org.example.service.AccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Starter01 { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring01.xml"); AccountService accountService = (AccountService) applicationContext.getBean("accountService"); accountService.transfer(1, 100.0, 2); } } ``` 以上是一个简单的示例,它演示了如何使用注解方式来管理Spring事务。在该示例中,通过获取ApplicationContext来获取AccountService bean,并调用其transfer方法来完成事务操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值