【发布时间】:2018-12-07 08:42:24
【问题描述】:
我认为我的事务管理器根本不起作用。在插入数据库时,自动增量值会增加,但不会添加新数据。 我以编程方式定义事务管理器、jdbc 模板和数据源。 事务管理器:
@Bean("txManager")
public DataSourceTransactionManager dataSourceTransactionManager(
BasicDataSource basicDataSource) {
return new DataSourceTransactionManager(basicDataSource);;
}
JDBC 模板:
@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(
BasicDataSource basicDataSource) {
return new NamedParameterJdbcTemplate(basicDataSource);
}
数据源:
@Bean
public BasicDataSource basicDataSource() {
BasicDataSource dataSource = new BasicDataSource();
// ...
dataSource.setDefaultAutoCommit(false);
// ...
return dataSource;
}
服务:
@Override
@Transactional("txManager")
public User register(RegistrationForm registrationForm) {
User userToRegister = UserMapper.registrationFormToUser().apply(registrationForm);
encryptPassword(userToRegister);
return userDao.insert(userToRegister);
}
这里是调试日志:
[DEBUG] [2018-12-07 10:37:35] [http-nio-8080-exec-10] DataSourceUtils - Fetching JDBC Connection from DataSource
[DEBUG] [2018-12-07 10:37:35] [http-nio-8080-exec-10] DataSourceUtils - Returning JDBC Connection to DataSource
[DEBUG] [2018-12-07 10:37:35] [http-nio-8080-exec-10] JdbcTemplate - Executing SQL update and returning generated keys
[DEBUG] [2018-12-07 10:37:35] [http-nio-8080-exec-10] JdbcTemplate - Executing prepared SQL statement [INSERT INTO "user" (first_name, last_name, email, password, role_id) VALUES (?, ?, ?, ?, ?)]
[DEBUG] [2018-12-07 10:37:35] [http-nio-8080-exec-10] DataSourceUtils - Fetching JDBC Connection from DataSource
[DEBUG] [2018-12-07 10:37:35] [http-nio-8080-exec-10] DataSourceUtils - Returning JDBC Connection to DataSource
我做错了什么?
【问题讨论】:
-
只是一种预感,但您是否尝试将
dataSource.setDefaultAutoCommit设置为true?或者在插入之后进行手动提交。 -
它以 defaultAutoCommit true 提交,但如果发生异常,则不会进行回滚操作。
-
你是否在 Spring config 中启用了事务管理?
-
我应该在哪里启用它(以编程方式)?
标签: java database spring transactions transactionmanager