Spring Boot에서 Jta Tansaction Manager를 설정해서 개발 하던 중에 어플리케이션을 실행 하면 tmlog가 생성이 된다.

UserTransactionServiceImp를 Bean으로 등록을 해서 로그가 생성이 되는데 로그를 생성하지 않거나 atomikos에 미리 정의 되어 있는 설정을 변경 하고 싶을 시 Properties를 새로 정의 해서 UserTransactionServiceImp를 init 하면 된다.

Tansaction  properties파일에 셋팅을 하면 된다고도 하고 application.properties에 설정을 하면 된다고 하는데 UserTransactionServiceImp Bean으로 등록을 별도로 정의 하면 init 순서에 따라서 properties에 설정 한 값이 셋팅된 값이 적용이 안될 경우에는 구현한 Tansaction Manager에 직접 설정을 하면 된다.

 

@Configuration
@Slf4j
public class JtaTransactionManagerConfig {

       @Autowired
        private Environment env;

        @Bean
        @DependsOn("userTransactionService") // userTransactionServiceImp가 먼저 초기화되도록 설정
        public PlatformTransactionManager transactionManager() throws Exception {

                log.info("transactionManager() 실행");

                // UserTransaction 설정

                 UserTransactionImp userTransaction = new UserTransactionImp();
                 userTransaction.setTransactionTimeout(300); // 300초로 트랜잭션 타임아웃 설정
                 // UserTransactionManager 설정
                 UserTransactionManager userTransactionManager = new UserTransactionManager();
                 userTransactionManager.setForceShutdown(false); // 애플리케이션 종료 시 강제 종료하지 않음
                 // JTA 트랜잭션 매니저 설정
                 JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(userTransaction, userTransactionManager);
                 // 커밋 실패 시 롤백 설정
                 jtaTransactionManager.setRollbackOnCommitFailure(true);
                 return jtaTransactionManager;
         }

         @Bean(initMethod = "init", destroyMethod = "shutdownForce")
         public UserTransactionServiceImp userTransactionService() {

                  // UserTransactionServiceImp 설정
                  UserTransactionServiceImp userTransactionServiceImp = new UserTransactionServiceImp();

                  // 트렌젝션 로그파일 생성 안되게 설정
                  Properties properties = new Properties();
                  properties.setProperty("com.atomikos.icatch.enable_logging", "false");
                  properties.setProperty("com.atomikos.icatch.log_base_dir", env.getProperty("com.atomikos.icatch.log_base_dir"));

                  userTransactionServiceImp.init(properties);

                  return userTransactionServiceImp;
         }

}

 

Bean으로 등록하지 않은 경우에는 properties에 com.atomikos.icatch 관련 설정을 직접 하면 된다.

 

참고로 로그를 생성하고 싶지 않을 경우 com.atomikos.icatch.log_base_dir 로그 디렉토리 설정 값을

 

Window는 NUL로 설정 하고 Linux는 /dev/null로 설정을 해야 해서 spring maven profile 설정에 locla과 서버 배포 설정에

 

값을 설정해서 config 설정에 사용 했다.

#리눅스
com.atomikos.icatch.log_base_dir
=/dev/null

#Window
com.atomikos.icatch.log_base_dir
=NUL

 

+ Recent posts