반응형

Spring Boot QueryDSL 초기 설정

Quesrydsl 을 사용하기 위해서는 SpringDataJPA도 추가해야 함

build.gradle 설정 추가

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'

	// H2 Database
	runtimeOnly 'com.h2database:h2'

	// QueryDSL
	implementation 'com.querydsl:querydsl-jpa:5.0.0'
	annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"    // querydsl JPAAnnotationProcessor 사용 지정
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"	// java.lang.NoClassDefFoundError(javax.annotation.Entity) 발생 대응
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"		// java.lang.NoClassDefFoundError (javax.annotation.Generated) 발생 대응
	
}

/** clean 태스크 실행시 QClass 삭제 */
clean {
	delete file('src/main/generated') // 인텔리제이 Annotation processor 생성물 생성위치
}

IntelliJ에서 프로젝트 실행시, 엔티티 클래스 앞에 Q가 붙은 Q클래스가 생성이 되는데 이는 IntelliJ 설정에 따라 생성되는 위치가 다르다.

IntelliJ IDEA에서 빌드방식 선택(Gradle or IntelliJ IDEA에 따라 ‘Querydsl Annotation processor’ 가 생성하는 Q클래스의 위치가 달라지기 때문이다.

Gradle 로 설정시

  • Qclass 생성경로: build/generated/sources/annotationProcessor/java/main
  • Q클래스에 대한 별도 정리 작업 없이 Clean태스크로 정리 된다.

IntelliJ IDEA로 설정시

  • Qclass 생성경로: src/main/generated
  • Compiler Annotation procesoors 설정영향받음
  • 기존 생성된 Q클래스는 갱신되지만 엔티티 위치 변경이나 삭제된 경우 기존Q클래스는 그대로 유지된다
  • src/main/generated 폴더에 생성된 Q클래스 처리 태스크를 작성 해야 한다.

  • IntelliJ IDE 설정으로 사용시 github로 버전관리를 하면 generated 경로 파일이 올라가지 않도록 .gitignore에 추가해주도록 하자. (generated)

[참고자료]

https://gaemi606.tistory.com/entry/Spring-Boot-Querydsl-추가-Gradle-7x

http://honeymon.io/tech/2020/07/09/gradle-annotation-processor-with-querydsl.html

반응형

 

1. @EnableScheduling 어노테이션 추가

  • @SpringBootApplication 어노테이션이 있는 Application.java 파일에 @EnableScheduling 어노테이션 추가
@SpringBootApplication
@EnableScheduling
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

 

2. Scheduler.java 파일 생성

  • Scheduler 클래스에 @Component 어노테이션 추가

3. 메소드 작성 및 @ Scheduled 어노테이션 작성 (크론표현식 이용)

  • @Scheduled(cron = "0 */5 * * * *") 5분주기
@Component
@Slf4j
public class Scheduler {
	
	@Scheduled(cron = "0 * * * * *")	// 1분마다
	public void test1() throws Exception {
		log.info("1분마다 수행");
	}

	@Scheduled(cron = "0 */5 * * * *")	// 5분마다
	public void test2() throws Exception {
			log.info("5분마다 수행");
	}

	@Scheduled(cron = "0 0 0 * * *")	// 매일 00시 정각
	public void test3() throws Exception {		
		log.info("매일 00시 수행");
	}
	
}

+ Recent posts