美文网首页
jpa事务管理

jpa事务管理

作者: hemingkung | 来源:发表于2019-11-17 16:52 被阅读0次

    1注解
    2代码

    package com.imooc.example.springdtx.web;
    
    import com.imooc.example.springdtx.dao.CustomerRepository;
    import com.imooc.example.springdtx.domain.Customer;
    import com.imooc.example.springdtx.service.CustomerServiceTxInAnnotation;
    import com.imooc.example.springdtx.service.CustomerServiceTxInCode;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    /**
     * Created by mavlarn on 2018/1/20.
     */
    @RestController
    @RequestMapping("/api/customer")
    public class CustomerResource {
        private static final Logger LOG = LoggerFactory.getLogger(CustomerResource.class);
    
        @Autowired
        private CustomerServiceTxInAnnotation customerService;
        @Autowired
        private CustomerServiceTxInCode customerServiceInCode;
        @Autowired
        private CustomerRepository customerRepository;
    
        @PostMapping("/annotation")
        public Customer createInAnnotation(@RequestBody Customer customer) {
            LOG.info("CustomerResource create in annotation create customer:{}", customer.getUsername());
            return customerService.create(customer);
        }
    
        @PostMapping("/code")
        public Customer createInCode(@RequestBody Customer customer) {
            LOG.info("CustomerResource create in code create customer:{}", customer.getUsername());
            return customerServiceInCode.create(customer);
        }
    
        @GetMapping("")
        public List<Customer> getAll() {
            return customerRepository.findAll();
        }
    
    }
    
    

    1注解

    package com.imooc.example.springdtx.service;
    
    import com.imooc.example.springdtx.dao.CustomerRepository;
    import com.imooc.example.springdtx.domain.Customer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    /**
     * Created by mavlarn on 2018/1/24.
     */
    @Service
    public class CustomerServiceTxInAnnotation {
    
        private static final Logger LOG = LoggerFactory.getLogger(CustomerServiceTxInAnnotation.class);
    
        @Autowired
        private CustomerRepository customerRepository;
    
        @Transactional
        public Customer create(Customer customer) {
            LOG.info("CustomerService In Annotation create customer:{}", customer.getUsername());
            if (customer.getId() != null) {
                throw new RuntimeException("用户已经存在");
            }
            customer.setUsername("Annotation:" + customer.getUsername());
            return customerRepository.save(customer);
        }
    }
    
    

    2代码

    package com.imooc.example.springdtx.service;
    
    import com.imooc.example.springdtx.dao.CustomerRepository;
    import com.imooc.example.springdtx.domain.Customer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.TransactionDefinition;
    import org.springframework.transaction.TransactionStatus;
    import org.springframework.transaction.support.DefaultTransactionDefinition;
    
    /**
     * Created by mavlarn on 2018/1/24.
     */
    @Service
    public class CustomerServiceTxInCode {
        private static final Logger LOG = LoggerFactory.getLogger(CustomerServiceTxInCode.class);
    
        @Autowired
        private CustomerRepository customerRepository;
        @Autowired
        private PlatformTransactionManager transactionManager;
    
        public Customer create(Customer customer) {
            LOG.info("CustomerService In Code create customer:{}", customer.getUsername());
            if (customer.getId() != null) {
                throw new RuntimeException("用户已经存在");
            }
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            def.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE);
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            def.setTimeout(15);
            TransactionStatus status = transactionManager.getTransaction(def);
            try {
                customer.setUsername("Code:" + customer.getUsername());
                customerRepository.save(customer);
                transactionManager.commit(status);
                return customer;
            } catch (Exception e) {
                transactionManager.rollback(status);
                throw e;
            }
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:jpa事务管理

          本文链接:https://www.haomeiwen.com/subject/jtnpictx.html