스프링/MVC

@Profile로 분리, 내부 static Class 로 TestCase 만들기 (@PostConstruct 사용)

nomoreFt 2022. 3. 21. 18:21
  1. 구분 하고 싶은 file에 @Profile 선언

//local - dev - server 로 보통 분리를 하여서 Profile을 관리한다.
@Profile("local")


@Profile("test")
  1. yml에 별개로 선언 (test는 따로 같은 resource 경로 만들어줘서 test로 수정)

local Profile로 실행

spring:
  profiles:
    active: local
  datasource:
    url: jdbc:h2:tcp://localhost/~/querydsl
    username: sa
    password: 1234
    driver-class-name: org.h2.Driver

src\test\resources\properties.yml test Profile로 실행


spring:
  profiles:
    active: test
  datasource:
    url: jdbc:h2:tcp://localhost/~/querydsl
    username: sa
    password: 1234
    driver-class-name: org.h2.Driver

yml 두개인 모습 (test, local)

image

내부 static class 선언, DI 받은 뒤, @PostConstruct로

실행되기 이전에 testCase 삽입시켜놓기

👍 그냥 바로 init() 안에 실행시키면 안되나요?
@Transaction과 @PostConstruct를 분리해줘야하기 때문에 내부 static class로 구현,
@Component를 달아줘서 Bean에 등록하고, 주 class에서 DI 받아서 실행시켜줬다.


@Profile("local")
@Component
@RequiredArgsConstructor
public class InitMember {
    private final InitMemberService initMemberService;
    **********************************
    @PostConstruct
    **********************************
    public void init() {
        initMemberService.init();
    }
    @Component
    static class InitMemberService {
        @PersistenceContext
        EntityManager em;
        @Transactional
        public void init() {
            Team teamA = new Team("teamA");
            Team teamB = new Team("teamB");
            em.persist(teamA);
            em.persist(teamB);
            for (int i = 0; i < 100; i++) {
                Team selectedTeam = i % 2 == 0 ? teamA : teamB;
                em.persist(new Member("member" + i, i, selectedTeam));
            }
        }
    }
}