속성 파일의 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.yml
JVM의 시작 매개 변수로 사용할 수 있습니다.파일이 여러 개인 경우 쉼표로 구분합니다.이와 같은 외부 속성을 사용하여 속성을 추가할 뿐만 아니라 속성을 쉽게 덮어쓸 수 있습니다.
저는 당신의 애플리케이션을 당신의 내부 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 |