【发布时间】:2016-08-09 18:36:37
【问题描述】:
我遇到了以下设置:
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>
<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<!-- connection string to read-write instance -->
</bean>
<bean id="roTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="roHibernateSessionFactory" />
<qualifier value="readOnly" />
</bean>
<bean id="roHibernateSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="roDataSource" />
</bean>
<bean id="roDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<!-- connection string to read-only instance -->
</bean>
带有“ro”前缀的bean基本上是为了让我们能够连接到数据库的只读实例。
然后我遇到了这段代码,其中我们使用事务管理器,它应该为我们提供连接到只读实例的休眠会话,同时使用注入读写数据源的 DAO bean。
<bean id="readWriteDao" class="com.services.dao.ReadWriteDao" scope="singleton">
<property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>
@Transactional(value = "readOnly", propagation = Propagation.SUPPORTS,
readOnly = true)
public List<MyItem> findItems(List<Long> itemIds) {
return readWriteDao.findItems(itemIds);
}
我的问题是:
- 这段代码使用的是哪个实例?
- 如何通过日志记录验证这一点?
【问题讨论】:
-
findItems的 bean 的作用域/生命周期是什么,即该方法在哪个上下文中执行? -
这是一个单例 bean,如果这就是您的意思,并被注入到 Web 服务的实现类中。
标签: spring hibernate transactionmanager