`

Spring学习 -TransactionProxyFactoryBean事务

阅读更多
applicationContext.xml
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="com.mysql.jdbc.Driver"/>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/asl_daily_report" />
		<property name="user" value="root" />
		<property name="password" value="" />
		<property name="maxPoolSize" value="40"/>
		<property name="minPoolSize" value="1"/>
		<property name="initialPoolSize" value="1"/>
		<property name="maxIdleTime" value="20"/>
	</bean>
	<bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<bean id="newsDao" class="org.crazyit.app.dao.impl.NewsDaoImpl">
		<property name="ds" ref="dataSource"/>
	</bean>
	<bean id="newsDaoTrans" class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager" ref="transactionManager"/> 
		<property name="target" ref="newsDao"/>
		<property name="transactionAttributes"> 
			<props> 
				<prop key="*">PROPAGATION_REQUIRED,-DataAccessException</prop> 
			</props>
		</property>
	</bean> 



NewsDao.java
package org.crazyit.app.dao;
import org.springframework.dao.DataAccessException;
public interface NewsDao {
	public void insert(String title, String content) throws DataAccessException;
}



NewsDaoImpl.java
package org.crazyit.app.dao.impl;
import javax.sql.DataSource;
import org.crazyit.app.dao.NewsDao;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
public class NewsDaoImpl implements NewsDao {
	private DataSource ds;
	public void setDs(DataSource ds) {
		this.ds = ds;
	}
	public void insert(String title, String content) throws DataAccessException {
		JdbcTemplate jt = new JdbcTemplate(ds);
		jt.update("insert into news_inf  values(null , ? , ?)", title, content);
		jt.update("insert into news_inf  values(null , ? , ?)", title, content);
	}
}



测试代码:
ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml");
		NewsDao dao = (NewsDao) ctx.getBean("newsDaoTrans", NewsDao.class);
		try {
			dao.insert("Java", "Spring2 Of J2EE");
		} catch (Exception e) {
			System.out.println(e.getClass().getSimpleName());
		}


输入出:DuplicateKeyException
同时事务没有提交,而是回滚。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics