spring(3)
2016-04-02 21:31
309 查看
applicationContext.xml文件的配置:
首先配置数据源(和数据库的连接配置):
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- &在配置文件中代表& -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis117?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="lovo"/>
</bean>
然后配置SqlSession工厂(连接Mybatis配置文件):
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis.cfg.xml"/>
</bean>
再加将配置的SqlSeesion和持久层建立依赖:
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lovo.sm.mapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"></property>
</bean>
然后配置事务管理器:
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
最后就是配置事务管理:
一般有两种方式:
方式一:用注解来配置,优点是配置简单,但是只适用于单数据库,不能满足多种数据库的需求
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
在配置文件中配置后,还需要在响相应的业务层实现类写注释:
在业务层类前加注释:@Transactional
在方法前加注释:@Transactional(isolation=Isolation.SERIALIZABLE,readOnly=false,rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
方式二:采用springAOP来声明式的处理事务
<tx:advice id="txAdvice" transaction-manager="dataSourceTransactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" read-only="true"></tx:method>
<tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"></tx:method>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"></tx:method>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"></tx:method>
</tx:attributes>
</tx:advice>
如果是第二种方式来配置事务管理,还需要配置相应的事务关联(指定事务管理的位置);
<aop:config>
<!-- 声明切入点 -->
<aop:pointcut id="serviceMethod" expression="execution(* com.lovo.sm.service.impl.*ServiceImpl.*(..))"></aop:pointcut>
<!-- 将我们定义的通知,交给AOP来关联 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"></aop:advisor>
</aop:config>
方式二可以满足多个数据库的需求,达到分布式数据的效果,通知需要注意的是方式一和方式二只能存在一个,不能并存
首先配置数据源(和数据库的连接配置):
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- &在配置文件中代表& -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis117?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="lovo"/>
</bean>
然后配置SqlSession工厂(连接Mybatis配置文件):
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis.cfg.xml"/>
</bean>
再加将配置的SqlSeesion和持久层建立依赖:
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lovo.sm.mapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"></property>
</bean>
然后配置事务管理器:
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
最后就是配置事务管理:
一般有两种方式:
方式一:用注解来配置,优点是配置简单,但是只适用于单数据库,不能满足多种数据库的需求
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
在配置文件中配置后,还需要在响相应的业务层实现类写注释:
在业务层类前加注释:@Transactional
在方法前加注释:@Transactional(isolation=Isolation.SERIALIZABLE,readOnly=false,rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
方式二:采用springAOP来声明式的处理事务
<tx:advice id="txAdvice" transaction-manager="dataSourceTransactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" read-only="true"></tx:method>
<tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"></tx:method>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"></tx:method>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"></tx:method>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"></tx:method>
</tx:attributes>
</tx:advice>
如果是第二种方式来配置事务管理,还需要配置相应的事务关联(指定事务管理的位置);
<aop:config>
<!-- 声明切入点 -->
<aop:pointcut id="serviceMethod" expression="execution(* com.lovo.sm.service.impl.*ServiceImpl.*(..))"></aop:pointcut>
<!-- 将我们定义的通知,交给AOP来关联 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"></aop:advisor>
</aop:config>
方式二可以满足多个数据库的需求,达到分布式数据的效果,通知需要注意的是方式一和方式二只能存在一个,不能并存
相关文章推荐
- java后台框架源码 企业级 SpringMVC mybatis or hibernate
- jar命令成功完成 java -jar 命令却提示“没有主清单属性”!
- AR增强现实专用汉明码生成器+JAVA核心代码+程序
- 去除Spring tool suite/myeclipse/eclipse项目上有个红色感叹号
- Java通过代理server上网
- Eclipse中的快捷键
- Java SE学习之printf 日期转换符
- MyBatis Spring整合配置映射接口类与映射xml文件
- 20145223《Java程序设计》第5周学习总结
- # 20145210 《Java程序设计》第05周学习总结
- Java - 多线程通信
- JAVA_基本LDAP操作实例
- Java 内存区域和GC机制(上)
- Java-Arrays的工具类
- Java序列化机制和原理
- java源文件的声明原则
- Java动态代理
- java编程实战之闰年的判断程序编写
- java包package之二
- springMVC简单的安全防御配置