ApplicationRunner-Spring Application 시작할 때 Query 실행하기
by Jeongjin Kim
이 포스트는 SprinBboot Application이 구동될 때 sql 파일을 직접 읽어서 실행하는 샘플을 보여드립니다.
Springboot 는 모든 빈이 초기화되고 애플리케이션이 실행되기 전에 ApplicationRunner
interface를 찾아서 실행시켜줍니다.
이 타이밍에 sql을 실행하는 구문을 넣어서 돌려봅니다.
아래 샘플은 샘플일 뿐 프로덕트에 그대로 사용하지는 마시기 바랍니다.
@Component
@Slf4j
public class Runner implements ApplicationRunner {
final
JdbcTemplate jdbcTemplate;
final
EntityManagerFactory entityManagerFactory;
public Runner(JdbcTemplate jdbcTemplate, EntityManagerFactory entityManagerFactory) {
this.jdbcTemplate = jdbcTemplate;
this.entityManagerFactory = entityManagerFactory;
}
@Override
public void run(ApplicationArguments args) throws FileNotFoundException {
log.debug("Runner start!");
URL resource = getClass().getClassLoader().getResource("data-mysql.sql");
if (resource == null)
return;
StringBuilder stringBuilder = new StringBuilder();
try (Stream<String> lines = Files.lines(Paths.get(resource.toURI()), StandardCharsets.UTF_8)) {
lines.forEach(stringBuilder::append);
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
String[] split = stringBuilder.toString().split(";");
JpaTransactionManager transactionManager = new JpaTransactionManager(entityManagerFactory);
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(transactionStatus -> {
for (String s : split) {
if (s.startsWith("#"))
continue;
jdbcTemplate.execute(s);
}
return null;
});
}
}
Subscribe via RSS