xml配置文件
在使用全註解形式去完成轉賬案例之前,我們先看看在使用純xml配置的applicationConfiguration.xml
<bean id="accountDao" class="com.xxx.dao.impl.AccountDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql:///account_db"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="accountService" class="com.xxx.service.impl.AccountServiceImpl">
<property name="accountDao" ref="accountDao"/>
</bean>
<!--配置平臺事務管理器 同樣要依賴dataSource-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--通知事務的增強-->
<!--propagation 事務傳播行爲
REQUIRED:指定當前方法必需在事務環境中運行,如果當前有事務環境就加入當前正在執行的事務環境,
如果當前沒有事務,就新建一個事務。這是默認值。
isolation 事務隔離級別
DEFAULT:採用數據庫默認隔離級別-->
<tx:advice id="tx" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
<tx:method name="find" isolation="DEFAULT" propagation="REQUIRED" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!--事務的織入-->
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="tx" pointcut="execution(* com.xxxservice.impl.*.*(..))"/>
</aop:config>
全註解形式源碼
-
建表
CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), money DECIMAL );
-
導入所需座標
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.32</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
-
AccountDaoImpl.java
@Repository public class AccountDaoImpl implements AccountDao { @Autowired private JdbcTemplate jdbcTemplate; public void out(String outMan, double money) { jdbcTemplate.update("update account set money=money-? where name=?",money,outMan); } public void in(String inMan, double money) { jdbcTemplate.update("update account set money=money+? where name=?",money,inMan); }
}
-
AccountServiceImpl.java
@Service @EnableTransactionManagement public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; @Transactional(isolation = Isolation.DEFAULT,propagation = Propagation.REQUIRED,readOnly = false) public void transfer(String outMan, String inMan, double money) { accountDao.out(outMan,money); // int i = 1/0; accountDao.in(inMan,money); } }
-
SpringConfiguration.java
@Configuration @ComponentScan("com.xxx") @Import(DataSourceConfiguration.class) public class SpringConfiguration { }
-
DataSourceConfiguration.java
@Configuration @PropertySource("classpath:jdbc.properties") public class DataSourceConfiguration { @Value("${jdbc.driver}") private String driverClass; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String user; @Value("${jdbc.password}") private String password; @Bean public DataSource getDataSource() throws PropertyVetoException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass(driverClass); dataSource.setJdbcUrl(url); dataSource.setUser(user); dataSource.setPassword(password); return dataSource; } @Bean public JdbcTemplate getTemplate(DataSource dataSource){ return new JdbcTemplate(dataSource); } @Bean public DataSourceTransactionManager getDSTM(DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } }
-
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///account_db jdbc.username=root jdbc.password=123456
-
測試
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfiguration.class) public class AnnoTest { @Autowired private AccountService accountService; @Test public void test02(){ accountService.transfer("tom","lucy",500f); } }
覺得有用不如進入我的Github博客留個言吧,謝謝支持!