Spring boot 学习七 spring的一些注解

一 事务控制

@Service
public class CityServiceImpl implements CityService {

    @Autowired
    private CityMapper cityMapper;
    
    @Override
    @Transactional(value = "primaryTxMan", readOnly = true)
    public List<City> findByState(String state) {
        return this.cityMapper.findByState(state);
    }
}

@Transcational(readOnly=true) 这个注解一般会写在业务类上,或者其方法上,用来对其添加事务控制。当括号中添加readOnly=true, 则会告诉底层数据源,这个是一个只读事务,对于JDBC而言,只读事务会有一定的速度优化

二  Transactional的value

   value这里主要用来指定不同的事务管理器;主要用来满足在同一个系统中,存在不同的事务管理器。比如在Spring中,声明了两种事务管理器txManager1, txManager2.

然后,用户可以根据这个参数来根据需要指定特定的txManager.

  那有同学会问什么情况下会存在多个事务管理器的情况呢? 比如在一个系统中,需要访问多个数据源或者多个数据库,则必然会配置多个事务管理器的。

三  value = "primaryTxMan" 表示提供的事务管理器,是一个bean的名字

  primaryTxMan是一个bean的名字,在下面配置。

四  @Configuration    @Bean 

  @Configuration注解该类,等价 与XML中配置beans;用@Bean标注方法等价于XML中配置bean

  比如如下的配置类AppConfig和下面的XML配置是等价的。

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }
}

下面的XML和上面的配置等价

<beans>
    <bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>

如下是primaryTxMan这个bean的定义,bean的名字是primaryTxMan

@Bean(name = "primaryTxMan")
    public PlatformTransactionManager primaryTransactionManager() {
        logger.info("primary dataSource--" + this.primeryDataSource().hashCode());
        return new DataSourceTransactionManager(this.primeryDataSource());
    }

五  下面看看  DataSourceTransactionManager 的定义,看看如何和DataSource绑定的

  DataSourceTransactionManager的构造函数需要传入一个DataSource类型的参数。下面看this.primeryDataSource()是如何提供DataSource的实现的:

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primeryDataSource() {
        return new DruidDataSource();
    }
  @Primary: 如果一个接口有两个实现类,可以用@Autowired,指定不同的名字进行绑定;另外一种方式就是使用@Primary,指定优先绑定的那个实现类。
  @ConfigurationProperties(prefix = "spring.datasource.primary"):指定和配置文件中的属性绑定。

 

posted @ 2018-04-30 10:58  刘大飞  阅读(258)  评论(0编辑  收藏  举报