您的位置:首页 > 运维架构 > Linux

LINUX开源监控平台Nagios(性能分析图表)

2010-08-24 22:57 771 查看
大部分情况下,每个事务代理的事务属性大同小异,事务代理的实现类都是TransactionProxyFactoryBean,事务代理bean都必须注入事务管理器。
对于这种情况,Spring提供了bean与bean之间的继承,可以简化配置。将大部分的通用配置,配置成事务模板,而实际的事务代理bean,则继承事务模板。这种配置方式可以减少部分配置代码,下面是采用继承的配置文件:

Xml代码

<?xmlversion="1.0"encoding="gb2312"?>

<!--Spring配置文件的文件头,包含DTD等信息-->

<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<!--定义数据源-->

<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<!--定义数据库驱动-->

<propertyname="driverClassName"><value>com.mysql.jdbc.Driver</value></property>

<!--定义数据库url-->

<propertyname="url"><value>jdbc:mysql://localhost:3306/spring</value></property>

<!--定义数据库用户名-->

<propertyname="username"><value>root</value></property>

<!--定义数据库密码-->

<propertyname="password"><value>32147</value></property>

</bean>

<!--定义一个hibernate的SessionFactory-->

<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<!--定义SessionFactory必须注入DataSource-->

<propertyname="dataSource"><reflocal="dataSource"/></property>

<propertyname="mappingResources">

<list>

<!--以下用来列出所有的PO映射文件-->

<value>Person.hbm.xml</value>

</list>

</property>

<propertyname="hibernateProperties">

<props>

<!--此处用来定义hibernate的SessionFactory的属性:

不同数据库连接,启动时选择create,update,create-drop-->

<propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<propkey="hibernate.hbm2ddl.auto">update</prop>

</props>

</property>

</bean>

<!--定义事务管理器,使用适用于Hibernte的事务管理器-->

<beanid="transactionManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<!--HibernateTransactionManagerbean需要依赖注入一个SessionFactorybean的引用-->

<propertyname="sessionFactory"><reflocal="sessionFactory"/></property>

</bean>

<!--配置事务模板,模板bean被设置成abstractbean,保证不会被初始化-->

<beanid="txBase"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

lazy-init="true"abstract="true">

<!--为事务模板注入事务管理器-->

<propertyname="transactionManager"><refbean="transactionManager"/></property>

<!--设置事务属性-->

<propertyname="transactionAttributes">

<props>

<propkey="find*">PROPAGATION_REQUIRED,readOnly</prop>

<propkey="*">PROPAGATION_REQUIRED</prop>

</props>

</property>

</bean>

<!--实际的事务代理bean-->

<beanid="personDao"parent="txBase">

<!--采用嵌套bean配置目标bean-->

<propertyname="target">

<beanclass="lee.PersonDaoHibernate">

<propertyname="sessionFactory"><reflocal="sessionFactory"/></property>

</bean>

</property>

</bean>

</beans>



这种配置方式,相比前面直接采用TransactionProxyFactoryBean的事务代理配置方式,可以大大减少配置文件的代码量。每个事务代理的配置都继承事务模板,无需重复指定事务代理的实现类,无需重复指定事务传播属性——当然,如果新的事务代理有额外的事务属性,也可指定自己的事务属性,此时,子bean的属性覆盖父bean的属性。当然每个事务代理bean都必须配置自己的目标bean,这不可避免。
上面的配置可看出,事务代理的配置依然是增量式的,每个事务代理都需要单独配置——虽然增量已经减少,但每个事务代理都需要单独配置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: