Spring声明式事務注釈の環境構築



1.環境構築手順
  • は、データソース、データベースドライバ、およびSpring-jdbcモジュールを導入する。
  • 試験コードを作成し、操作データベース
  • メソッドに@Transactionをマークし、トランザクション方法であることを示す。
  • @EnbaleTransation Managementを使用して注釈に基づく事務管理機能を開く。
  • は、トランザクションを制御するための事務マネージャを構成する。 
  • 2.テストコード
  • .試験ビーン
  • package com.yibai.spring.annotation.tx.service.bean;
    
    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    
    @Setter
    @Getter
    @ToString
    public class Person {
    	private int id;
    	private String name;
    	private int age;
    	private String address;
    }
    
  • .DAO
  • をテストします。
    package com.yibai.spring.annotation.tx.service;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    import com.yibai.spring.annotation.tx.service.bean.Person;
    
    @Repository
    public class PersonDao {
    
    	@Autowired
    	private JdbcTemplate jdbc;
    
    	public int insertPerson(Person person) {
    		String sql = "INSERT INTO person(name,age,address) values(?,?,?)";
    		return jdbc.update(sql, person.getName(), person.getAge(), person.getAddress());
    	}
    }
    
  • .テストサービス
  • package com.yibai.spring.annotation.tx.service;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.yibai.spring.annotation.tx.service.bean.Person;
    
    @Service
    public class PersonService {
    
    	@Autowired
    	private PersonDao userDao;
    
    	@Transactional
    	public int savePerson(Person person) {
    		int insert = userDao.insertPerson(person);
    		if (insert == 1) {
    			System.out.println("    ");
    		}
    
    //		int a = 1 / 0;
    
    		return insert;
    	}
    }
    
  • .主構成類
  • package com.yibai.spring.annotation.tx;
    
    import javax.sql.DataSource;
    
    import org.postgresql.Driver;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    import com.alibaba.druid.pool.DruidDataSource;
    
    @ComponentScan(basePackages = "com.yibai.spring.annotation.tx")
    @EnableTransactionManagement
    public class TxConfig {
    
    	@Bean //    
    	public DataSource dataSource() {
    		DruidDataSource dataSource = new DruidDataSource();
    		dataSource.setUsername("postgres");
    		dataSource.setPassword("123123");
    		dataSource.setUrl("jdbc:postgresql://127.0.0.1:5432/postgres");
    		dataSource.setDriverClassName(Driver.class.getName());
    		return dataSource;
    	}
    
    	@Bean
    	public JdbcTemplate jdbcTemplate(DataSource dataSource) {
    		return new JdbcTemplate(dataSource);
    	}
    
    	@Bean //     
    	public PlatformTransactionManager platformTransactionManager(DataSource dataSource) {
    		return new DataSourceTransactionManager(dataSource);
    	}
    
    }
    
  • 2.5スタートクラス
  • package com.yibai.spring.annotation.tx;
    
    import java.util.List;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import com.yibai.spring.annotation.tx.service.PersonService;
    import com.yibai.spring.annotation.tx.service.bean.Person;
    
    public class MainClass {
    
    	public static void main(String[] args) {
    
    		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(TxConfig.class);
    
    		PersonService personService = applicationContext.getBean(PersonService.class);
    		Person person = new Person();
    		person.setName("yibai");
    		person.setAge(1000);
    		person.setAddress("zhejiang hangz");
    		try {
    			personService.savePerson(person);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		applicationContext.close();
    	}
    
    }