속성 파일의 Spring boot 외부 구성
다른 환경에 배포하려는 전쟁 시 패키지로 사용할 수 있는 스프링 부트 애플리케이션이 있습니다.이 배포를 자동화하려면 구성 파일을 외부로 보다 쉽게 이동할 수 있습니다.
현재 src/main/resources에 있는 application.properties 파일에서 모든 것이 정상적으로 작동합니다.그런 다음 'mvn install'을 사용하여 Tomcat에 배치할 수 있는 전쟁을 만듭니다.하지만 저는 mvn 설치에 존재할 필요는 없지만 전쟁을 전개하는 동안 읽혀질 수 있는 .yml 파일을 사용하고 싶습니다.
외부화된 구성은 스프링 부트가 파일을 찾는 위치를 보여주고 72.3 응용 프로그램의 외부 속성 위치 변경은 이를 구성하는 방법에 대한 자세한 내용을 제공하지만 이를 내 코드로 변환하는 방법을 이해하지 못합니다.
제 애플리케이션 클래스는 다음과 같습니다: package be.ugent.lca;
Updated below
이 파일에 @PropertySource를 추가해야 합니까?특정 상대 경로를 어떻게 지칭합니까?
아마도 대부분의 봄 부츠 설명서에 기록되어 있는 것처럼 느껴지지만, 어떻게 해야 하는지 이해할 수 없습니다.
편집
이것이 별개의 문제인지는 잘 모르겠지만, 저는 여전히 관련이 있다고 생각합니다.
때 not os는 yaml 파일을 찾을 수 없습니다.하지만 application .properties 또는 .yml 파일이 없을 때와 같은 오류가 다시 발생합니다.이제 애플리케이션은 다음과 같습니다.
@Configuration
**@PropertySource("file:${application_home}/application.yml")**
@ComponentScan({"be.ugent.lca","be.ugent.sherpa.configuration"})
@EnableAutoConfiguration
@EnableSpringDataWebSupport
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
application_home OS 변수
$ echo $application_home
C:\Masterproef\clones\la15-lca-web\rest-service\target
my application.yml 파일(불만 부분):
sherpa:
package:
base: be.ugent.lca
java -jar *.war 오류 모든 변형:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'sherpa.package.base' in string value "${sherpa.package.base}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:808)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1027)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
... 142 more
외부 속성 파일 사용
답은 스프링 부트 문서에 있습니다. 제가 설명해 드리겠습니다.
요, , 사면안됩다를 하면 안 .@PropertySource여기 Yaml 단점 아래에 언급된 것처럼 Yaml 구성으로 작업할 때:
@PropertySource 주석을 통해 YAML 파일을 로드할 수 없습니다.따라서 이러한 방식으로 값을 로드해야 하는 경우에는 속성 파일을 사용해야 합니다.
그러면 속성 파일을 로드하는 방법은 무엇입니까?응용 프로그램 속성 파일에 대해 설명합니다.
하나는 다음과 같이 로드됩니다.application.yml위의 링크에서 언급한 것처럼 디렉토리 중 하나에 배치합니다.이것은 일반적인 구성에 적합합니다.
외부 속성 파일을 사용하려는 환경별 구성(및 암호 등)에 대해서도 설명합니다.
application.properties를 구성 파일 이름으로 사용하지 않으려면 spring.config.name 환경 속성을 지정하여 다른 이름으로 전환할 수 있습니다.spring.config.location 환경 속성(쉼표로 구분된 디렉토리 위치 또는 파일 경로 목록)을 사용하여 명시적 위치를 참조할 수도 있습니다.
그래서 당신은 그것을 사용합니다.spring.config.location환경 재산외부 구성 파일이 있다고 가정합니다.application-external.yml에 다음과.-Dspring.config.location=file:${home}/conf/application-external.ymlJVM의 시작 매개 변수로 사용할 수 있습니다.파일이 여러 개인 경우 쉼표로 구분합니다.이와 같은 외부 속성을 사용하여 속성을 추가할 뿐만 아니라 속성을 쉽게 덮어쓸 수 있습니다.
저는 당신의 애플리케이션을 당신의 내부 application.yml 파일로만 작동하게 한 다음, 당신의 외부 속성 파일에서 (테스트) 속성을 덮어쓰고 그 값을 어딘가에 기록하는 것으로 이것을 테스트하는 것을 조언하고 싶습니다.
객체에 Yaml 속성 바인딩
때 Yaml 속성과 함께 합니다.@ConfigurationProperties예를 들어 목록이나 더 복잡한 속성 구조를 사용할 때 유용합니다.(따라서 Yaml 속성을 사용해야 합니다. 간단한 속성의 경우 일반 속성 파일을 사용하는 것이 더 나을 수 있습니다.자세한 내용은 다음을 참조하십시오.유형 안전 구성 속성
추가: IntelliJ, Maven 및 JUNit 테스트에서 이러한 속성 로드
때때로 이러한 특성을 메이븐 빌드에 로드하거나 테스트를 수행할 때 로드할 수 있습니다.또는 IDE를 사용한 지역 개발용으로만 사용할 수 있습니다.
개발에 IntelliJ를 사용하는 경우 Tomcat Run Configuration: "Run" -> "Edit Configurations"에 IntelliJ를 추가하여 쉽게 추가할 수 있습니다. "Tomcat Server"에서 실행 구성을 선택한 후 Server 탭을 확인하고 "VM Options" 아래에 추가합니다.
Maven 빌드에서 외부 구성 파일을 사용하려면: pom.xml에서 maven surefire 플러그인을 다음과 같이 구성합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Dspring.config.location=file:${home}/conf/application-external.yml</argLine>
</configuration>
</plugin>
IntelliJ에서 JUNit 테스트를 실행하는 경우:
- 실행 → 구성 편집
- 기본값 → JUNit
- VM 옵션 추가 ->
-ea -Dspring.config.location=file:${home}/conf/application-external.yml
예, 사용해야 합니다.@PropertySource아래와 같이
여기서 중요한 점은 OS 환경 변수 또는 시스템 속성으로 속성을 제공(또는 다른 이름을 선택)하거나 Spring boot을 시작하는 동안 명령줄 인수로 전달할 수 있다는 것입니다.이 속성은 구성 파일의 위치를 알려줍니다..properties또는.yaml)가 정확하게 위치합니다(예:/usr/local/my_project/등)
@Configuration
@PropertySource("file:${application_home}config.properties")//or specify yaml file
@ComponentScan({"be.ugent.lca","be.ugent.sherpa.configuration"})
@EnableAutoConfiguration
@EnableSpringDataWebSupport
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
이를 달성하기 위한 아주 간단한 방법이 있습니다.
원래 application.properties 파일 내에서 다음 행을 지정할 수 있습니다.
spring.config.import=파일:디렉터리_수신인__File/Property_Name.properties
그러면 외부 속성 파일의 모든 속성이 자동으로 동기화됩니다.
이제 여러 속성 파일에서 속성을 가져와야 하는 상황이 발생했다고 가정해 보겠습니다.이 경우 외부 속성 파일에서 동일한 행을 언급하면 두 번째 속성 파일에서 나머지 속성을 가져오는 등의 작업을 수행할 수 있습니다.
다음 예를 생각해 보십시오.
application.properties:
spring.config.import=파일:리소스/사용자 정의1.속성
사용자 지정 1.속성:
server.port=8090
.
.
.
spring.config.import=file:Resources/Custom2.properties
시스템 환경 변수를 사용하여 외부화된 속성 파일을 사용하는 가장 쉬운 방법 중 하나는 application.properties 파일에서 다음 구문을 사용할 수 있습니다.
spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PORT}
이제 위의 사용된 환경 변수를 선언합니다.
export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"
이렇게 하면 다른 환경에서 동일한 변수에 대해 다른 값을 사용할 수 있습니다.
부트 클래스에서 다음 코드를 사용합니다.
@PropertySource({"classpath:omnicell-health.properties"})
컨트롤러에서 아래 코드를 사용합니다.
@Autowired
private Environment env;
언급URL : https://stackoverflow.com/questions/43020491/spring-boot-external-configuration-of-property-file
'programing' 카테고리의 다른 글
| C# 및 Excel 행 삭제 (0) | 2023.06.30 |
|---|---|
| Angular | 데코레이터에 서비스를 주입 (0) | 2023.06.30 |
| 보조 확인 방법이 지금 동기화되었는지 여부 (0) | 2023.06.25 |
| 성능 테스트를 위해 오라클 캐시를 비활성화하는 방법 (0) | 2023.06.25 |
| Oracle에서 임시 테이블로 선택 (0) | 2023.06.25 |