- 구분 하고 싶은 file에 @Profile 선언
//local - dev - server 로 보통 분리를 하여서 Profile을 관리한다.
@Profile("local")
@Profile("test")
- 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)
내부 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));
}
}
}
}