springboot 注解事务不能回滚
@SpringBootApplication
@EnableTransactionManagement
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
configuration中的设置
@Bean
public DataSource dataSource() throws Exception {
Properties dataSourceProps = this.createDataSourceProperties();
DataSource dataSource = DruidDataSourceFactory.createDataSource(dataSourceProps);
return dataSource;
}
private Properties createDataSourceProperties() {
Properties dataSourceProps = new Properties();
dataSourceProps.put("driverClassName", env.getProperty(ConstantParam.DATASOURCE_DRIVERCLASS_KEY));
dataSourceProps.put("url", env.getProperty(ConstantParam.DATASOURCE_URL_KEY));
dataSourceProps.put("username", env.getProperty(ConstantParam.DATASOURCE_USER_KEY));
dataSourceProps.put("password", env.getProperty(ConstantParam.DATASOURCE_PASSWORD_KEY));
dataSourceProps.put("initialSize", env.getProperty(ConstantParam.DATASOURCE_INITIALSIZE_KEY));
dataSourceProps.put("maxActive", env.getProperty(ConstantParam.DATASOURCE_MAXACTIVE_KEY));
dataSourceProps.put("minIdle", env.getProperty(ConstantParam.DATASOURCE_MINIDELE_KEY));
dataSourceProps.put("maxWait", env.getProperty(ConstantParam.DATASOURCE_MAXWAIT_KEY));
dataSourceProps.put("removeAbandoned", env.getProperty(ConstantParam.DATASOURCE_REMOVEABANDONED_KEY));
dataSourceProps.put("removeAbandonedTimeout",
env.getProperty(ConstantParam.DATASOURCE_REMOVEABANDONED_TIMEOUT_KEY));
dataSourceProps.put("timeBetweenEvictionRunsMillis",
env.getProperty(ConstantParam.DATASOURCE_TIMEBETWEENEVICTION_RUNSMILLIS_KEY));
dataSourceProps.put("minEvictableIdleTimeMillis",
env.getProperty(ConstantParam.DATASOURCE_MINEVICTABKEIDLE_TIMEMILLIS_KEY));
dataSourceProps.put("validationQuery", env.getProperty(ConstantParam.DATASOURCE_VALIDATIONQUERY_KEY));
dataSourceProps.put("testWhileIdle", env.getProperty(ConstantParam.DATASOURCE_TESTWHILEIDLE_KEY));
dataSourceProps.put("testOnBorrow", env.getProperty(ConstantParam.DATASOURCE_TESTONBORROW_KEY));
dataSourceProps.put("testOnReturn", env.getProperty(ConstantParam.DATASOURCE_TESTONRETURN_KEY));
dataSourceProps.put("poolPreparedStatements",
env.getProperty(ConstantParam.DATASOURCE_POOLPREPAREDSTATEMENTS_KEY));
dataSourceProps.put("maxPoolPreparedStatementPerConnectionSize",
env.getProperty(ConstantParam.DATASOURCE_MAXPOOLPREPAREDSTATEMENTPERCONNECTIONSIZE_KEY));
dataSourceProps.put("filters", env.getProperty(ConstantParam.DATASOURCE_FILTERS_KEY));
dataSourceProps.put("connectionProperties", env.getProperty(ConstantParam.DATASOURCE_CONNECTIONPROPERTIES_KEY));
LOGGER.info("DataSource Properties : " + dataSourceProps.toString());
return dataSourceProps;
}
@Bean(name = "txManager")
@Primary
public DataSourceTransactionManager dataSourceTransactionManager() throws Exception {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource());
return dataSourceTransactionManager;
}
service中的方法
@Transactional(rollbackFor = { Exception.class })
@Override
public void insert() {
userMapper.insertIntoUser();
System.out.println(0 / 0);
}
CREATE TABLE `tm_user` (
`user_id` INT(11) NOT NULL COMMENT '账号id',
`employee_id` INT(11) DEFAULT NULL COMMENT '主键ID',
`created_by` VARCHAR(30) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT 'created_by',
`created_at` DATETIME DEFAULT NULL COMMENT 'created_at',
`updated_by` VARCHAR(30) COLLATE utf8_croatian_ci DEFAULT NULL COMMENT 'updated_by',
`updated_at` DATETIME DEFAULT NULL COMMENT 'updated_at',
PRIMARY KEY (`user_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci COMMENT='用户表'
为什么事务不回滚,还是能插入到数据库中?求解答!