programing

그래들 잡으러요Spring Boot에 빌드 버전

codeshow 2023. 2. 26. 10:19
반응형

그래들 잡으러요Spring Boot에 빌드 버전

Spring Boot 응용 프로그램의 응용 프로그램 버전을 뷰에 표시하려고 합니다.이 버전 정보에 액세스할 수 있다고 확신하지만 방법을 알 수 없습니다.

저는 https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html,의 정보를 따르려고 했습니다.이 정보를 제 컴퓨터에 입력해 주세요.application.properties:

info.build.version=${version}

그런 다음 로드합니다.@Value("${version.test}")컨트롤러에서는 동작하지 않고, 다음과 같은 에러만 표시됩니다.

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'version' in string value "${version}"

앱 버전, 스프링 부트 버전 등의 정보를 컨트롤러로 가져오는 적절한 방법이 있습니까?

이 항목을 에 추가할 수도 있습니다.build.gradle:

springBoot {    
    buildInfo() 
}

그 다음에, 을 사용할 수 있습니다.BuildProperties콩:

@Autowired
private BuildProperties buildProperties;

그리고 버전도 입수합니다.buildProperties.getVersion()

레퍼런스 매뉴얼에 기재되어 있는 와 같이 Gradle에게 어플리케이션의 자원을 처리하도록 지시하여 어플리케이션의 자원을 대체하도록 할 필요가 있습니다.${version}플레이스 홀더와 프로젝트 버전:

processResources {
    expand(project.properties)
}

안전을 위해 범위를 좁혀서application.properties처리되는 것은 처리됩니다.

processResources {
    filesMatching('application.properties') {
        expand(project.properties)
    }
}

이제, 당신의 부동산이 이름지어졌다고 가정해 봅시다.info.build.version, 다음에서 입수할 수 있습니다.@Value:

@Value("${info.build.version}")

application.yml에 다음 항목을 추가하여 이 문제를 해결했습니다.

${version?:unknown}

cli:gradle boot Run 및 IntelliJ에서도 동작하며 IntelliJ에서 부팅하기 전에 Gradle 태스크 process Resources를 호출하거나 스프링 프로파일을 사용할 필요가 없습니다.

이 기능은 Gradle ver: 4.6 및 Spring Boot ver: 2.0.1에서 작동합니다.해방.도움이 되었으면 좋겠다;)

이 문제를 이렇게 해결했습니다.info.build.versionapplication.properties:

info.build.version=whatever

컴포넌트에서 사용

@Value("${info.build.version}")
private String version;

이제 버전 정보를 에 추가합니다.build.gradle다음과 같은 파일:

version = '0.0.2-SNAPSHOT'

그런 다음 application.properties를 regex로 대체하고 버전 정보를 업데이트하는 메서드를 추가합니다.

def updateApplicationProperties() {
    def configFile = new File('src/main/resources/application.properties')
    println "updating version to '${version}' in ${configFile}"
    String configContent = configFile.getText('UTF-8')
    configContent = configContent.replaceAll(/info\.build\.version=.*/, "info.build.version=${version}")
    configFile.write(configContent, 'UTF-8')
}

마지막으로 트리거할 때 메서드가 호출되는지 확인합니다.build또는bootRun:

allprojects {
    updateVersion()
}

바로 그겁니다.이 솔루션은 Gradle이 앱을 컴파일하도록 하고 IDE에서 Spring Boot 앱을 실행하는 경우 작동합니다.값은 업데이트되지 않지만 예외가 발생하지는 않으며 Gradle을 실행하자마자 다시 업데이트됩니다.

이것이 나에게 문제를 해결해 줄 뿐만 아니라 다른 사람들에게도 도움이 되었으면 좋겠다.나는 더 적절한 해결책을 찾을 수 없어서 스스로 대본을 썼다.

언급URL : https://stackoverflow.com/questions/34963056/getting-the-gradle-build-version-into-spring-boot

반응형