maven 프로젝트를 가져올 수 없습니다.Spring 응용 프로그램의 버전 속성(@Value)
메이븐 프로젝트를 얻는 방법@Value 주석이 있는 Spring Boot 어플리케이션의 버전 속성
SpringBoot 어플리케이션에서 Maven 프로젝트 버전을 얻는 방법에 대한 몇 가지 조사와 시험 결과 나에게 맞는 것을 찾을 수 없었습니다.
매니페스토를 사용하는 것은 클래스 로더의 문제로 인해 확실히 잘못된 경로입니다.즉, 스프링이 최초로 발견한 매니페스토를 얻을 수 있습니다.이것은 제 어플리케이션이 아닙니다.
제가 찾은 해결책 중 하나는 maven resources 플러그인을 사용하여 리소스 파일의 속성을 "필터링"(바꾸기)하는 것입니다.이 경우 스프링은application.properties
.
이 작업을 수행하기 위한 단계는 다음과 같습니다.
pom 파일에서 다음 정의를 사용하여 리소스 필터링을 활성화합니다.
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
</includes>
</resource>
</resources>
에서application.properties
파일:
application.name=@project.artifactId@
build.version=@project.version@
build.timestamp=@timestamp@
${property} 대신 @property@가 표시됩니다.에서application.properties
파일.
그spring-boot-starter-parent
기준을 재정의하다${}
로 구분하다.@
:
<resource.delimiter>@</resource.delimiter>
<!-- delimiter that doesn't clash with Spring ${} placeholders -->
<delimiters>
<delimiter>${resource.delimiter}</delimiter>
</delimiters>
그런 다음 봄철에 이러한 특성에 액세스할 수 있습니다.@Value
다음과 같습니다.
@Value("${application.name}")
private String applicationName;
@Value("${build.version}")
private String buildVersion;
@Value("${build.timestamp}")
private String buildTimestamp;
Spring Boot 응용 프로그램에서 Maven 속성에 액세스하려면 구분 기호로 매핑하기만 하면 됩니다.@
에서application.properties
다음과 같습니다.
app.version=@project.version@
app.name=@project.name@
그런 다음 앱에서 일반 속성처럼 사용합니다. 예를 들어 다음과 같습니다.
@Service
public class SomeService {
@Value("${app.version}")
private String appVersion;
// other stuff
}
그러나 yaml을 사용하여 응용 프로그램 속성을 저장하는 경우 구분 기호를 교체해야 할 수 있습니다.@
예를 들어 다른 누군가와 함께^
우리 회사에서는pom.xml
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>^</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
또는 더 단순합니다. 변수만 바꾸면 됩니다.resource.delimiter
에propeties
pom.xml 블록:
<properties>
<java.version>11</java.version>
<resource.delimiter>^</resource.delimiter>
</properties>
그런 다음 속성 파일에서 다음과 같이 사용합니다.
app:
version: ^project.version^
name: ^project.name^
application.properties나 딜리미터 변경을 추가할 필요가 없습니다.목표 빌드 정보가 포함된 플러그인과 bean Build Properties가 포함된 자동 배선 시작 클래스를 추가합니다.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.3.RELEASE</version>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
스타트업 클래스에는
@Autowired
BuildProperties buildProperties;
나중에@PostConstruct
시작 클래스에서 여러 메서드를 호출하여 빌드 타임스탬프, 버전, 아티팩트 이름, 그룹 등을 검색할 수 있습니다.
private static final Logger LOGGER = LoggerFactory.getLogger(YourSpringApplication.class);
@Autowired
BuildProperties buildProperties;
public static void main(String[] args) {
SpringApplication.run(YourSpringApplication.class, args);
}
@PostConstruct
private void logVersion() {
LOGGER.info(buildProperties.getName());
LOGGER.info(buildProperties.getVersion());
LOGGER.info(buildProperties.get("time"));
LOGGER.info(buildProperties.getGroup());
}
그info
액튜에이터는 이 정보를 자동으로 사용하고, 검출되면 표시하며, 검출되면 git 정보를 표시합니다.
그것은 아마도 당신의 메인 폼이 스프링 부츠 스타터-부모를 부모 폼으로 선언하지 않기 때문일 것이다.이 경우 필터링은 기본적으로 실행되므로 필터링을 명시적으로 선언할 필요가 없습니다.
에서 변경하는 나의 경우:
<parent>
<groupId>com.mycompany</groupId>
<artifactId>mycompany-parent</artifactId>
<version>20</version>
</parent>
대상:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
내 어플리케이션에서 main pom.xml은 필터링을 선언하지 않고 문제를 해결했습니다.
It works with @charactor.
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
application.properties 또는 application.yml 파일에 저장...
버전: @project.version@name: @project.name@
언급URL : https://stackoverflow.com/questions/38983934/cannot-get-maven-project-version-property-in-a-spring-application-with-value
'programing' 카테고리의 다른 글
핫 새로고침 시 프로세스가 정의되지 않음 (0) | 2023.03.13 |
---|---|
woocommerce 감사 페이지의 헤드 태그에 javascript 코드를 삽입합니다. (0) | 2023.03.13 |
재스민 테스트 각도templateUrl을 사용하는 JS 지시어 (0) | 2023.03.13 |
노드를 사용하여 XLSX 해석 및 json 생성 (0) | 2023.03.13 |
데이터베이스 - (행 또는 레코드, 열 또는 필드) (0) | 2023.03.13 |