programing

Spring Boot Application 이름에 프로그래밍 방식으로 액세스하는 방법

muds 2023. 3. 27. 21:42
반응형

Spring Boot Application 이름에 프로그래밍 방식으로 액세스하는 방법

스프링 부트 어플리케이션에서 bootstrap.yml 파일을 사용하여 어플리케이션 이름을 정의했습니다.

spring:
  application:
    name: abc

런타임/프로그래머리로 이 응용 프로그램 이름을 얻으려면 어떻게 해야 합니까?

속성/YAML 파일에서 설정한 속성에 액세스하려면 @Value 주석을 사용할 수 있어야 합니다.

@Value("${spring.application.name}")
private String appName;
@Autowired
private ApplicationContext applicationContext;    
...
this.applicationContext.getId();

이것을 찾아주세요.

# IDENTITY (ContextIdApplicationContextInitializer)
spring.application.name=
spring.application.index=

스프링 부트 참조 매뉴얼.

그리고 그에 대한 소스코드를 따르세요.ContextIdApplicationContextInitializer클래스:

@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
    applicationContext.setId(getApplicationId(applicationContext.getEnvironment()));
}

여기서 기본 동작은 다음과 같습니다.

/**
 * Placeholder pattern to resolve for application name
 */
private static final String NAME_PATTERN = "${vcap.application.name:${spring.application.name:${spring.config.name:application}}}";

그 이후로는@ValueSpring Boot에서는 구성 속성을 참조할 때 주석이 권장되지 않습니다.applicationContext.getId();항상 가치를 돌려주는 것은 아니다spring.application.name또 다른 방법은 환경으로부터 직접 가치를 얻는 것입니다.

private final Environment environment;

...

public MyBean(final Environment environment) {
    this.environment = environment;
}

...

private getApplicationName() {
    return this.environment.get("spring.application.name");
}

다른 방법으로는 독자적인 ConfigurationProperties 클래스를 생성하여 값에 액세스할 수 있습니다.

이것이 최선의 방법이라고 말하는 것은 아닙니다.더 좋은 방법이 있었으면 좋겠다고 생각합니다만, 방법이 있습니다.

주의! Spring Boot을 사용하는 경우테스트, 속성/yml을 겹쳐서 사용해야 합니다.그렇지 않으면 환경 또는 앱콘텍스트에서 설정 파일이 로드되지 않습니다.앱 이름이 설정되지 않았습니다.다음과 같은 경우:

@PropertySource("classpath:application.properties")
@RunWith(SpringRunner.class)
@SpringBootTest
....

이 게시물은 오래되었지만 답변이 없는 질문은 질색입니다.따라서 다음 스니펫을 사용합니다.

@Value("${spring.application.name [: defaultValue]}") 
private String appName;

[ ] 의 사이는 옵션입니다.

그래서 정말 추악한 방법을 찾았는데 효과가 있어서 더 이상 검색하지 않아요.이게 도움이 될지도 몰라

기본적인 전제는 spring Environment가 propertySource 내부에 값을 저장하는 것입니다.부트스트랩 설정은 ResourcePropertySource에 저장되어 있기 때문에 이 소스로부터 취득할 수 있습니다.현재는 예외를 두고 있지만, 예외에서 가치를 얻을 수 있기 때문에 더 이상 조사하지 않았습니다.

    try {
        this.environment.getProperty("name", ResourcePropertySource.class);
    } catch (ConversionFailedException e) {
        String res = (String)e.getValue();
    }

그런 다음 관심 있는 모든 자산에 대해 이 작업을 수행할 수 있습니다.

내가 못생겼다고 했지만, 효과가 있어.

언급URL : https://stackoverflow.com/questions/31429761/how-to-access-a-spring-boot-applications-name-programmatically

반응형