zoukankan      html  css  js  c++  java
  • Springboot学习七 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"):指定和配置文件中的属性绑定。
  • 相关阅读:
    《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句
    《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句
    Jenkins ant打包部署
    Jenkins ant打包部署
    Jenkins ant打包部署
    Jenkins ant打包部署
    外媒解读Web安全核心PKI的四大致命问题
    外媒解读Web安全核心PKI的四大致命问题
    “浪子”觉醒,通过养羊创业致富
    在互联网时代,餐饮业将如何突破?
  • 原文地址:https://www.cnblogs.com/liufei1983/p/8973158.html
Copyright © 2011-2022 走看看