applicationContext.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<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
1 2 3 4 5 |
package org.crazyit.app.dao; import org.springframework.dao.DataAccessException; public interface NewsDao { public void insert(String title, String content) throws DataAccessException; } |
NewsDaoImpl.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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); } } |
测试代码:
1 2 3 4 5 6 7 |
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
同时事务没有提交,而是回滚。