배경
- local, dev, prod 등 프로파일에선 mysql 셋팅
- test 프로파일은 h2에 schema.sql, data.sql로 데이터 셋팅
- nativeQuery를 사용하는 경우 DATE_FORMAT 같은 mysql 함수 사용.
spring:
datasource:
url: jdbc:h2:mem:testdb;MODE=MYSQL;DB_CLOSE_DELAY=-1
DATE_FORMAT 대체
public class H2Functions {
public static String formatDate(java.sql.Timestamp timestamp, String format) {
return new java.text.SimpleDateFormat(format).format(timestamp);
}
}
schema.sql
CREATE ALIAS IF NOT EXISTS DATE_FORMAT FOR "com.example.H2Functions.formatDate";
Repository
@Query(value = "SELECT DATE_FORMAT(order_date, 'yyyy-MM-dd') AS formatted_date, COUNT(*) " +
"FROM orders GROUP BY formatted_date", nativeQuery = true)
List<Object[]> findOrderCountGroupedByDate();
위의 코드는 예시이며, 실제로는 h2와 mysql에서 format으로 넘겨주는 형태가 다릅니다. mysql에서는 %m%d, %Y 등으로 쓰고 h2에선 ‘MMdd’, ‘yyyy’ 등을 사용합니다.