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以上版本