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}}}";
그 이후로는@Value
Spring 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
'programing' 카테고리의 다른 글
Ruby on Rails에 대한 WordPress 대체 방법은 무엇입니까? (0) | 2023.03.27 |
---|---|
word press: 단축코드가 표시되는 경우에만 javascript 로드 (0) | 2023.03.27 |
리소스에 대한 각도 후행 슬래시 (0) | 2023.03.27 |
문자열화할 때마다 JSON.stringify가 큰따옴표를 이스케이프합니다. (0) | 2023.03.27 |
사용자 정의 워드프레스 테이블의 행을 업데이트하는 방법 (0) | 2023.03.27 |