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"):指定和配置文件中的属性绑定。
  • 相关阅读:
    js 数据结构-栈与队列
    mysql (已解决)Access denied for user 'root'@'localhost' (using password: NO)
    mysql (已解决p)MYSQL5.7启动不了,本地计算机上的 MySQL57 服务启动后停止。
    mysql 慢查询日志,灾难日志恢复,错误日志
    php json的相关操作
    (转)LitJson 遍历key
    (转)用Eclipse进行C++开发时Bianry not found的问题解决
    (转) 在Eclipse中进行C/C++开发的配置方法(20140721最新版)
    (转)如何在eclipse的配置文件里指定jdk路径
    (转)mongodb分片
  • 原文地址:https://www.cnblogs.com/liufei1983/p/8973158.html
Copyright © 2011-2022 走看看