Spring boot에 JOOQ를 도입했을 때, Liquibase 주위에서 에러가 되기 위해서 대처한 이야기

배경



Spring boot를 공부하고 있습니다.
  • IDE: STS4
  • 각종 버젼:Java13, Spring boot2, JOOQ 3.13.1

  • 입니다.

    Spring boot를 공부하는 동안 SQL을 메소드 기반으로 작성하고 싶었습니다.



    Spring 기본 JPA로 간단한 DB 액세스를했지만,
    테이블 JOIN 할 때, 너무 이케테나이 생각이 왔다. . .
    과거에 일로 메소드 베이스로 SELECT문을 쓰고 있었던 것을 기억해,
    비슷한 라이브러리를 찾았다.

    JOOQ 되는 쿼리 빌더형의 ORM 되는 것이 있는 것인가!
    라고 깨달았으므로 도입.

    도입 방법



    할애합니다.
    Postgres를 이용하면서 대상 데이터베이스의 테이블에 대한 테이블 관련 소스 코드의 자동 생성까지는 그다지 곤란하지 않고 갈 수 있었습니다.

    오류 발생!



    컴파일 에러도 없기 때문에, WEB 어플리케이션을 기동하려고 하면 아래와 같은 에러가 발생했습니다.
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.ChangeLogParseException: Error parsing classpath:/db/changelog/db.changelog-master.yaml
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE]
        at jp.ken.PasswordmanagerApplication.main(PasswordmanagerApplication.java:10) ~[main/:na]
    Caused by: liquibase.exception.ChangeLogParseException: Error parsing classpath:/db/changelog/db.changelog-master.yaml
        at liquibase.parser.core.yaml.YamlChangeLogParser.parse(YamlChangeLogParser.java:83) ~[liquibase-core-3.8.7.jar:na]
        at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:217) ~[liquibase-core-3.8.7.jar:na]
        at liquibase.Liquibase.update(Liquibase.java:190) ~[liquibase-core-3.8.7.jar:na]
        at liquibase.Liquibase.update(Liquibase.java:179) ~[liquibase-core-3.8.7.jar:na]
        at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:366) ~[liquibase-core-3.8.7.jar:na]
        at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:314) ~[liquibase-core-3.8.7.jar:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        ... 18 common frames omitted
    Caused by: java.io.FileNotFoundException: class path resource [db/changelog/db.changelog-master.yaml] cannot be resolved to URL because it does not exist
        at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:195) ~[spring-core-5.2.4.RELEASE.jar:5.2.4.RELEASE]
        at liquibase.integration.spring.SpringLiquibase$SpringResourceOpener.getResourcesAsStream(SpringLiquibase.java:613) ~[liquibase-core-3.8.7.jar:na]
        at liquibase.util.StreamUtil.singleInputStream(StreamUtil.java:186) ~[liquibase-core-3.8.7.jar:na]
        at liquibase.parser.core.yaml.YamlChangeLogParser.parse(YamlChangeLogParser.java:26) ~[liquibase-core-3.8.7.jar:na]
        ... 25 common frames omitted
    

    이게 뭐야. . . 그건 Liquibase 란 무엇입니까?

    선인의 지혜를 빌려,
    htps : // 코 m / 오 글 8080 / ms / 37 베아 c5 210f5363 아 f4b

    어쩌면 DB 관리 도구처럼 보입니다.
    편리할 것 같지만 지금은 필요 없다.
    그래서 어떻게든 스루할 수 없는가.

    조사하면서 다음 설정을 시도했습니다.


  • src/main/resources에 db 폴더 만들기
  • db 폴더에 db.changelog-master.yaml이라는 파일을 만듭니다
  • application.properties에 추가

  • db.changelog-master.yaml의 내용



    db.changelog-master.yaml
    databaseChangeLog:
      - changeSet:
           author: authorName
           id: changelog-1.0
    

    파일을 비우거나 "databaseChangeLog:"를 남겨두는 것만으로도 에러가 되었으므로, 필요한 최소한을 찾았더니 위와 같이.

    application.properties 추가 내용



    application.properties
    spring.liquibase.change-log=classpath:db/db.changelog-master.yaml
    

    위의 yaml을 지정합니다.

    파일을 작성하는 점은 다음 사이트에서 파악.
    h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 41990295 / 쟈 ぁ ぇ ㄴ ㄴ ㄴ ㄴ ㅇㅇ

    또한, 필요한 최소한의 yaml 요소는 다음 사이트에서 추측.
    htps : // 코 m / 오 글 8080 / ms / 37 베아 c5 210f5363 아 f4b

    위에서 오류를 해결했습니다! 죄송합니다.

    좋은 웹페이지 즐겨찾기