关于spring事务管理的配置方式

Spring事务配置方式有两种:javaConfig的配置方式和基于Xml的配置方式,下面将介绍着两种配置方式:

一,基于xml的配置方式
①在xml文件中配置数据源:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
    <property name="driverClassName" value="com.mysql,jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/userdbcp?characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    <property name="maxActive" value="20"/>
</bean>

②配置事务管理器:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源 -->
    <property name="dataSource" ref="dataSource"></property>
</bean>

③声明事务切面的通知

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <!-- 传播行为 -->
        <tx:method name="save*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="insert*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
        <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
        <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
    </tx:attributes>
</tx:advice>

④声明事务切面

<aop:config>
    <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.zjh.e.service..*.*(..))"/>
</aop:config>

二,基于javaConfig的配置方式:
①配置数据源:

@PropertySource(value = "classpath:config/dbconfig.properties")
@Configuration
/**在同样的DataSource中,首先使用被标注的DataSource*/
@Primary
public class DruidDataSourceConfig{

    private Logger logger = LoggerFactory.getLogger(DruidDataSourceConfig.class);

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.name}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Value("${jdbc.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.initialSize}")
     private Integer initialSize;

    @Value("${jdbc.minIdle}")
    private Integer minIdle;

    @Value("${jdbc.maxActive}")
    private Integer maxActive;

    @Value("${jdbc.maxWait}")
    private Integer maxWait;

    @Value("${jdbc.timeBetweenEvictionRunsMillis}")
    private Integer timeBetweenEvictionRunsMillis;

    @Value("${jdbc.minEvictableIdleTimeMillis}")
    private Integer minEvictableIdleTimeMillis;

    @Value("${jdbc.validationQuery}")
    private String validationQuery;

    @Value("${jdbc.testWhileIdle}")
    private Boolean testWhileIdle;

    @Value("${jdbc.testOnBorrow}")
    private Boolean testOnBorrow;

    @Value("${jdbc.testOnReturn}")
    private Boolean testOnReturn;

    @Value("${jdbc.poolPreparedStatements}")
    private Boolean poolPreparedStatements;

    @Value("${jdbc.maxPoolPreparedStatementPerConnectionSize}")
    private Integer maxPoolPreparedStatementPerConnectionSize;

    @Value("${jdbc.filters}")
    private String filters;

    @Value("${jdbc.connectionProperties}")
    private String connectionProperties;

    @Value("${jdbc.type}")
    private String type;

    @Bean(name = "dataSource")
    public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();

    dataSource.setUrl(url);
    dataSource.setUsername(username);
    dataSource.setPassword(password);
    dataSource.setDriverClassName(driverClassName);
    dataSource.setInitialSize(initialSize);
    dataSource.setMinIdle(minIdle);
    dataSource.setMaxActive(maxActive);
    dataSource.setMaxWait(maxWait);
    dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
    dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
    dataSource.setValidationQuery(validationQuery);
    dataSource.setTestWhileIdle(testWhileIdle);
    dataSource.setTestOnBorrow(testOnBorrow);
    dataSource.setTestOnReturn(testOnReturn);
    dataSource.setPoolPreparedStatements(poolPreparedStatements);
    dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
    try{
        dataSource.setFilters(filters);
    }catch (SQLException e) {
        logger.error("druid configuration initialization filter", e);
    }
        dataSource.setConnectionProperties(connectionProperties);

        return dataSource;
    }

}

②配置事务管理器:


@Configuration
***@EnableTransactionManagement***
@EnableJpaRepositories(basePackages = "com.zjh.blog.dao")
@Import(ServiceConfig.class)
public class TransactionManagerConfig {

    @Bean
    public JpaTransactionManager transactionManager(
    EntityManagerFactory entityManagerFactory) {
    JpaTransactionManager jpa = new JpaTransactionManager();
    jpa.setEntityManagerFactory(entityManagerFactory);
    return jpa;
    }

}

其中:@EnableTransactionManagement是开启事务管理,在service层使用 @Transactional即可开启对该方法或类的事务管理

两者比较:
①xml配置:
优势:集中配置,代码配置分离更加方便管理,支持目前所有的spring版本
劣势:繁杂,编译期不容易发现错误
②javaConfig配置
优势:代码简洁,
劣势:国内xml配置方式比较多,不容易被人接受,且必须使用spring3.0以上版本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值