Skip to content

Commit

Permalink
refactor: TransactionService 객체가 DataSource를 갖도록 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
Ohjintaek committed Oct 15, 2023
1 parent 8827209 commit e531b69
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
15 changes: 9 additions & 6 deletions app/src/main/java/com/techcourse/service/TxUserService.java
Original file line number Diff line number Diff line change
@@ -1,35 +1,38 @@
package com.techcourse.service;

import com.techcourse.config.DataSourceConfig;
import com.techcourse.domain.User;
import org.springframework.transaction.support.TransactionExecutor;
import org.springframework.transaction.support.TransactionManager;

import javax.sql.DataSource;

public class TxUserService implements UserService {

private final UserService userService;
private final TransactionManager transactionManager = new TransactionExecutor();
private final DataSource dataSource;
private final UserService userService;

public TxUserService(UserService userService) {
public TxUserService(DataSource dataSource, UserService userService) {
this.dataSource = dataSource;
this.userService = userService;
}

@Override
public User findById(long id) {
return transactionManager.execute(DataSourceConfig.getInstance(), () -> userService.findById(id));
return transactionManager.execute(dataSource, () -> userService.findById(id));
}

@Override
public void insert(User user) {
transactionManager.execute(DataSourceConfig.getInstance(), () -> {
transactionManager.execute(dataSource, () -> {
userService.insert(user);
return null;
});
}

@Override
public void changePassword(long id, String newPassword, String createBy) {
transactionManager.execute(DataSourceConfig.getInstance(), () -> {
transactionManager.execute(dataSource, () -> {
userService.changePassword(id, newPassword, createBy);
return null;
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ void testTransactionRollback() {
// 트랜잭션 롤백 테스트를 위해 mock으로 교체
final var userHistoryDao = new MockUserHistoryDao(jdbcTemplate);
final var appUserService = new AppUserService(userDao, userHistoryDao);
final var userService = new TxUserService(appUserService);
final var userService = new TxUserService(DataSourceConfig.getInstance(), appUserService);

final var newPassword = "newPassword";
final var createBy = "gugu";
Expand Down

0 comments on commit e531b69

Please sign in to comment.