spring-boot 를 jar 패키지 로 만 든 후 시작 할 때 지정 한 매개 변수 가 잘못 되 었 습 니 다.
오늘 배경 항목 을 수정 합 니 다.시작 할 때 사용 할 프로필 을 spring.profiles 로 지정 합 니 다.
프로젝트 에 프로필 을 추가 한 후 자바-jar.\base-exec.jar--spring.profiles.active=dev--server.port=9121 을 사용 하여 시작 할 때 매개 변 수 를 주입 할 수 없습니다.
프로필 작성 규칙 을 확인 하고 규칙 을 말씀 드 리 겠 습 니 다.
우 리 는 Spring Boot 응용 프로그램 을 개발 할 때 보통 같은 프로그램 이 개발,테스트,생산 등 몇 가지 서로 다른 환경 에 응용 되 고 설치 된다.그 중에서 각 환경의 데이터베이스 주소,서버 포트 등 설정 이 다 를 수 있 습 니 다.서로 다른 환경 을 위해 포장 할 때 설정 파일 을 자주 수정 해 야 한다 면 매우 번 거 롭 고 오류 가 발생 하기 쉬 운 일이 될 것 입 니 다.
다 환경의 설정 에 대해 각종 프로젝트 구축 도구 나 프레임 워 크 의 기본 적 인 사고방식 은 일치한다.여러 개의 서로 다른 환경의 설정 파일 을 설정 한 다음 에 포장 명령 을 통 해 포장 해 야 할 내용 을 지정 한 후에 구분 포장 을 한다.Spring Boot 도 예외 가 아니 거나 더욱 간단 하 다.
Spring Boot 에서 다 중 환경 설정 파일 이름 은 application-{profile}.properties 의 형식 을 만족 시 켜 야 합 니 다.그 중에서{profile}은 환경 표지 에 대응 합 니 다.예 를 들 어:
application-dev.properties:개발 환경
application-test.properties:테스트 환경
application-prod.properties:생산 환경
어떤 구체 적 인 프로필 이 불 러 올 지 에 대해 서 는 application.properties 파일 에서 spring.profiles.active 속성 을 통 해 설정 해 야 합 니 다.그 값 은{profile}값 에 대응 합 니 다.
예 를 들 어 spring.profiles.active=test 는 application-test.properties 설정 파일 내용 을 불 러 옵 니 다.
다음은 서로 다른 환경 에서 서로 다른 서비스 포트 를 설정 하 는 것 을 예 로 들 어 사례 실험 을 한다.
환경 별로 서로 다른 프로필 을 새로 만 듭 니 다.application-dev.properties,application-test.properties,application-prod.properties
이 세 파일 은 모두 서로 다른 server.port 속성 을 설정 합 니 다.예 를 들 어 dev 환경 은 8080,test 환경 은 9090,prod 환경 은 80 으로 설정 합 니 다.
application.properties 에 spring.profiles.active=dev 를 설정 합 니 다.기본 값 은 dev 환경 으로 설정 합 니 다.
다른 설정 의 로드 테스트:
자바-jar xxx.jar 를 실행 하면 서비스 포트 가 8080,즉 기본 개발 환경(dev)으로 설정 되 어 있 음 을 관찰 할 수 있 습 니 다.
자바-jar xxx.jar-spring.profiles.active=test 를 실행 하면 서비스 포트 가 9090 으로 설정 되 어 있 는 것 을 관찰 할 수 있 습 니 다.즉,테스트 환경의 설정(test)입 니 다.
자바-jar xxx.jar-spring.profiles.active=prod 를 실행 하면 서비스 포트 가 80,즉 생산 환경의 설정(prod)으로 설정 되 어 있 음 을 관찰 할 수 있 습 니 다.
위의 실험 에 따라 다음 과 같이 다 환경의 배치 방향 을 정리 할 수 있다.
application.properties 에 서 는 일반적인 내용 을 설정 하고 spring.profiles.active=dev 를 설정 하여 개발 환경 을 기본 으로 설정 합 니 다.
application-{profile}.properties 에서 환경 별로 설정 합 니 다.
setAddCommandLine 속성 설정 검사
응용 프로그램 에서 설정 을 관리 하 는 것 은 쉬 운 임무 가 아니다.특히 응용 프로그램 이 여러 환경 에 배치 되 어야 할 때.일반적으로 각 환경 에 대응 하 는 속성 파일 을 제공 하여 각자 의 데이터베이스 연결 정보,서버 정보 와 제3자 서비스 계 정 등 을 설정 해 야 한다.일반적인 응용 배 치 는 개발,테스트 와 생산 등 몇 가지 환경 을 포함한다.서로 다른 환경 간 의 설정 에 덮어 쓰기 관계 가 존재 합 니 다.테스트 환경 에서 의 설정 은 개발 환경 을 덮어 쓰 고 생산 환경 에서 의 설정 은 테스트 환경 을 덮어 씁 니 다.Spring 프레임 워 크 자체 가 설정 속성 파일 을 관리 하 는 다양한 방식 을 제공 합 니 다.Spring 3.1 이전 에는 Property Placeholder Configure 를 사용 할 수 있 습 니 다.
Spring 3.1 은 새로운 환경(Environment)과 개요 정보(Profile)API 를 도입 해 다양한 환경 과 프로필 을 보다 유연 하 게 처리 하 는 방식 이다.그러나 Spring 의 이러한 배치 관리 방식 의 문 제 는 너무 많은 선택 을 해서 개발 자 들 이 어 쩔 수 없 게 하 는 것 이다.Spring Boot 는 응용 설정 을 관리 하 는 통 일 된 방식 을 제공 합 니 다.개발 자 들 이 속성 파일,YAML 파일,환경 변수 와 명령 행 매개 변 수 를 사용 하여 우선 순위 가 다른 설정 값 을 정의 할 수 있 도록 합 니 다.
Spring Boot 가 제공 하 는 설정 우선 순위 순서 가 복잡 합 니 다.우선 순위 가 높 은 것 부터 낮은 것 까지 의 순서에 따라 구체 적 인 목록 은 다음 과 같다.
명령 행 인자.
System.getProperties()를 통 해 가 져 온 자바 시스템 매개 변수 입 니 다.
운영 체제 환경 변수.
java:comp/env 에서 얻 은 JNDI 속성 입 니 다.
RandomValue PropertySource 를 통 해 생 성 된'random.*'속성 입 니 다.
Jar 파일 이외 의 속성 파일 을 사용 합 니 다.(spring.config.location 매개 변 수 를 통 해)
Jar 파일 내부 의 속성 파일 을 사용 합 니 다.
자바 클래스("@Configuration"주 해 를 포함 하 는 자바 클래스)에서"@PropertySource"주 해 를 통 해 설명 하 는 속성 파일 을 사용 합 니 다.
"SpringApplication.setDefaultProperties"를 통 해 설명 하 는 기본 속성 입 니 다.
Spring Boot 의 이 설정 우선 순 위 는 복잡 해 보이 지만 합 리 적 입 니 다.예 를 들 어 명령 행 인자 의 우선 순위 가 가장 높 게 설정 되 어 있 습 니 다.
이러한 장점 은 테스트 나 생산 환경 에서 설정 매개 변수 값 을 신속하게 수정 할 수 있 고 재 포장 과 배치 응용 이 필요 하지 않다 는 것 이다.
SpringApplication 클래스 는 기본적으로"--"로 시작 하 는 명령 행 인 자 를 응용 프로그램 에서 사용 할 수 있 는 설정 인자 로 바 꿉 니 다.예 를 들 어"--name=Alex"는 설정 인자"name"의 값 을"Alex"로 설정 합 니 다.이 기능 이 필요 하지 않 으 면'SpringApplication.setAddCommandLine Properties(false)'를 통 해 명령 행 인 자 를 분석 하지 않 을 수 있 습 니 다.
setAddCommandLine 속성 설정 검사
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(WebApplication.class);
springApplication.run(args);
}
args 인자 가 들 어 오 는 지 확인 하 십시오.제 프로젝트 의 문 제 는 바로 여기에 있 습 니 다.
public static void main(String[] args) {
new SpringApplication.run(WebApplication.class);
}
spring-boot 프로젝트 를 포장 한 후 명령 행 을 통 해 인 자 를 전달 할 수 없습니다.
java -jar .\tk-provider.jar --spring.profiles.active=test
테스트 환경의 프로필 로 프로젝트 를 실행 하려 고 했 는데 프로젝트 가 시 작 될 때 dev 프로필 로 실행 되 었 습 니 다.
java -jar .\tk-provider.jar --spring.profiles.active=test
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/softwareWorkspace/hqtx/HqService/ServiceProvider/tk-provider/target/tk-provider.jar!/BOOT-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/softwareWorkspace/hqtx/HqService/ServiceProvider/tk-provider/target/tk-provider.jar!/BOOT-INF/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
====================> : Spring Boot
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.4.RELEASE)
2018-08-23 16:14:48.494 INFO 349004 --- [ main] com.hq.tk.TkApplication : Starting TkApplication v1.0-SNAPSHOT on longqin with PID 349004 (D:\softwareWorkspace\hqtx\HqService\ServiceProvider\tk-provider\target\tk-provider.jar started by Administrator in D:\softwareWorkspace\hqtx\HqService\ServiceProvider\tk-provider\target)
2018-08-23 16:14:48.497 DEBUG 349004 --- [ main] com.hq.tk.TkApplication : Running with Spring Boot v2.0.4.RELEASE, Spring v5.0.8.RELEASE
2018-08-23 16:14:48.498 INFO 349004 --- [ main] com.hq.tk.TkApplication : The following profiles are active: dev
시작 을 수 없 이 시 도 했 습 니 다:The following profiles are active:dev,곧 무 너 질 것 같 습 니 다.나중에 명령 행 의 매개 변 수 는 main 함수 의 args 매개 변 수 를 통 해 받 은 것 이 라 고 냉정 하 게 생각 했 습 니 다.바로 시작 류 를 보 았 습 니 다.과연.처음 쓰기,springapplication.run 은 args 인자 가 들 어 오지 않 았 습 니 다.
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SsoApplication.class);
//
springApplication.addListeners(new SpringBootApplicationStartup());
springApplication.run();
}
변경 하 다.
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SsoApplication.class);
//
springApplication.addListeners(new SpringBootApplicationStartup());
springApplication.run(args);
}
다시 포장 실행,출현:다음 프로 파일 이 활성 상태 입 니 다:test
java -jar .\tk-provider.jar --spring.profiles.active=test
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/softwareWorkspace/hqtx/HqService/ServiceProvider/tk-provider/target/tk-provider.jar!/BOOT-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/softwareWorkspace/hqtx/HqService/ServiceProvider/tk-provider/target/tk-provider.jar!/BOOT-INF/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
====================> : Spring Boot
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.4.RELEASE)
2018-08-23 16:30:58.961 INFO 348708 --- [ main] com.hq.tk.TkApplication : Starting TkApplication v1.0-SNAPSHOT on longqin with PID 348708 (D:\softwareWorkspace\hqtx\HqService\ServiceProvider\tk-provider\target\tk-provider.jar started by Administrator in D:\softwareWorkspace\hqtx\HqService\ServiceProvider\tk-provider\target)
2018-08-23 16:30:58.964 DEBUG 348708 --- [ main] com.hq.tk.TkApplication : Running with Spring Boot v2.0.4.RELEASE, Spring v5.0.8.RELEASE
2018-08-23 16:30:58.966 INFO 348708 --- [ main] com.hq.tk.TkApplication : The following profiles are active: test
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.