Spring Boot에 배포
독립 실행형 모드에서 Spring Boot 애플리케이션 빌드 및 실행
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지에서 참조하십시오.
1장. Spring Boot 독립 실행형 시작하기 링크 복사링크가 클립보드에 복사되었습니다!
1.1. Spring Boot 독립 실행형 배포 모드 정보 링크 복사링크가 클립보드에 복사되었습니다!
독립 실행형 배포 모드에서 Spring Boot 애플리케이션은 Jar 파일로 패키지되고 JVM(Java Virtual Machine) 내에서 직접 실행됩니다. 애플리케이션 패키징 및 실행에 대한 이러한 접근 방식은 서비스가 최소 요구 사항 세트로 패키지되는 마이크로 서비스 철학과 일치합니다. Spring Boot 애플리케이션은 -jar
옵션과 함께 java
명령을 사용하여 직접 실행할 수 있습니다. 예를 들면 다음과 같습니다.
java -jar SpringBootApplication.jar
java -jar SpringBootApplication.jar
여기서 Spring Boot는 실행 가능한 Jar의 기본 클래스를 제공합니다. Fuse에서 Spring Boot 독립 실행형 애플리케이션을 빌드하는 데 필요한 요소는 다음과 같습니다.
FuseServiceVersion of materials (BOM) - Red Hat Maven 리포지토리에서 신중하게 분류된 종속 항목을 정의합니다. BOM은 Maven의 종속성 관리 메커니즘을 악용하여 Maven 종속성의 적절한 버전을 정의합니다.
참고: Fuse BOM에 정의된 종속 항목만 Red Hat에서 지원합니다.
- Spring Boot Maven 플러그인 Cryostat- Maven에서 독립 실행형 Spring Boot 애플리케이션에 대한 빌드 프로세스를 구현합니다. 이 플러그인은 Spring Boot 애플리케이션을 실행 가능한 Jar 파일로 패키징합니다.
1.2. Spring Boot 2에 배포 링크 복사링크가 클립보드에 복사되었습니다!
독립 실행형 배포 모드에서는 Spring Boot 2에 배포할 수 있습니다.
OpenShift 배포 모드에 대한 자세한 내용은 OpenShift의 Fuse 가이드를 참조하십시오.
1.3. Spring Boot 2의 새로운 Camel 구성 요소 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot 2는 Camel 버전 2.23
을 지원하며 아래에 나열된 몇 가지 새로운 camel 구성 요소를 지원합니다.
Spring Boot 2의 새로운 Camel 구성 요소
- as2-component
- aws-iam-component
- fhir-component
- google-calendar-stream-component
- google-mail-stream-component
- google-sheets-component
- google-sheets-stream-component
- ipfs-component
- kubernetes-hpa-component
- kubernetes-job-component
- micrometer-component
- mybatis-bean-component
- nsq-component
- rxjava2
- service-component
- spring-cloud-consul
- spring-cloud-zookeeper
- testcontainers-spring
- testcontainers
- web3j-component
2장. Fuse 부스터 사용 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Fuse는 Fuse 애플리케이션을 시작하고 유용한 구성 요소를 증명할 수 있도록 다음과 같은 부스터를 제공합니다.
- 2.2절. “Circuit Breaker booster를 빌드하고 실행합니다.” - 분산 애플리케이션이 네트워크 연결에 대한 중단 및 백엔드 서비스를 일시적으로 사용할 수 없도록 하는 예는 다음과 같습니다.
- 2.3절. “Externalized Configuration booster 빌드 및 실행” - Apache Camel 경로에 대한 구성을 외부화하는 방법의 예입니다.
- 2.4절. “REST API booster 빌드 및 실행” - HTTP 프로토콜을 사용하여 원격(Apache Camel에서 노출) 서비스와 상호 작용하는 메커니즘을 도입하는 예입니다.
부스터 데모를 빌드하고 실행하려면 다음 사전 요구 사항을 설치합니다.
2.1. 부스터 프로젝트 생성 링크 복사링크가 클립보드에 복사되었습니다!
개발자가 독립 실행형 애플리케이션을 실행할 수 있도록 Fuse booster 프로젝트가 있습니다. 여기에 제공된 지침은 부스터 프로젝트 인 회로 차단기 부스터 중 하나를 생성하는 방법을 안내합니다. 이 실습에서는 Spring Boot에서 Fuse의 유용한 구성 요소를 보여줍니다.
넷플릭스/Hystrix 회로 차단기를 사용하면 분산 애플리케이션이 네트워크 연결 및 백엔드 서비스의 임시 사용할 수 없는 중단을 처리할 수 있습니다. 회로 차단기 패턴의 기본 개념은 종속 서비스의 손실이 자동으로 감지되고 백엔드 서비스를 일시적으로 사용할 수 없는 경우 대체 동작이 프로그램될 수 있다는 것입니다.
Fuse 회로 차단기 부스터는 두 가지 관련 서비스로 구성됩니다.
-
이름
서비스인 백엔드 서비스는 이름을 Cryostat로 반환합니다. -
인사말
서비스인 frontend 서비스는name
서비스를 호출하여 이름을 가져온 다음 문자열Hello, NAME
을 반환합니다.
이 부스터 데모에서 Hystrix 회로 차단기는 인사말
서비스와 이름
서비스 사이에 삽입됩니다. 백엔드 이름
서비스를 사용할 수 없게 되면 인사말
서비스가 대체 동작으로 대체되고, 이름
서비스가 재시작될 때까지 기다리는 동안 차단되는 대신 즉시 클라이언트에 응답할 수 있습니다.
사전 요구 사항
- Red Hat Developer Platform 에 액세스할 수 있어야 합니다.
- 지원되는 JDK(Java Developer Kit) 버전이 있어야 합니다. 자세한 내용은 지원되는 구성 페이지를 참조하십시오.
- Maven 설정에 설명된 대로 Apache Maven 3.3.x 이상을 설치하고 구성해야 합니다. https://access.redhat.com/documentation/en-us/red_hat_fuse/7.12/html-single/getting_started_with_fuse_on_spring_boot#set-up-maven-locally
절차
- https://developers.redhat.com/launch 로 이동합니다.
START 를 클릭합니다.
시작 관리자 마법사에서 Red Hat 계정에 로그인하라는 메시지가 표시됩니다.
- 로그인 또는 등록 버튼을 클릭한 다음 로그인합니다.
- 시작 관리자 페이지에서 예제 애플리케이션 배포 버튼을 클릭합니다.
- Create Example Application 페이지에서 Create Example Application에 name, fuse-circuit-breaker 를 입력합니다.
- Select an Example 을 클릭합니다.
예제 대화 상자에서 회로 차단기 옵션을 선택합니다. 런타임 선택 드롭다운 메뉴가 표시됩니다.
- Select a Runtime 드롭다운에서 Fuse 를 선택합니다.
-
버전 드롭다운 메뉴에서 7.12(Red Hat Fuse) 를 선택합니다(
2.21.2(Community)
버전을 선택하지 마십시오. - 저장을 클릭합니다.
- 예제 애플리케이션 생성 페이지에서 다운로드를 클릭합니다.
-
애플리케이션 준비 상태 대화 상자가 표시되면
Download.zip
을 클릭합니다. 브라우저에서 생성된 booster 프로젝트를 다운로드합니다( ZIP 파일로 패키징됨). - 아카이브 유틸리티를 사용하여 생성된 프로젝트를 로컬 파일 시스템의 편리한 위치로 추출합니다.
2.2. Circuit Breaker booster를 빌드하고 실행합니다. 링크 복사링크가 클립보드에 복사되었습니다!
넷플릭스/Hystrix 회로 차단기 구성 요소를 사용하면 분산 애플리케이션이 네트워크 연결 중단 및 백엔드 서비스를 일시적으로 사용할 수 없게 되는 문제를 해결할 수 있습니다. 회로 차단기 패턴의 기본 개념은 종속 서비스의 손실이 자동으로 감지되고 백엔드 서비스를 일시적으로 사용할 수 없는 경우 대체 동작이 프로그램될 수 있다는 것입니다.
Fuse 회로 차단기 부스터는 두 가지 관련 서비스로 구성됩니다.
- 이름을 로 반환하는 이름 서비스.
-
name 서비스를 호출하여 이름을 가져온 다음 문자열
Hello, NAME
.
이 데모에서는 인사말 서비스와 이름 서비스 사이에 Hystrix 회로 차단기가 삽입됩니다. 이름 서비스를 사용할 수 없게 되면 인사말 서비스가 다시 시작될 때까지 대기하는 동안 차단하거나 시간 초과하는 대신 대체 동작으로 대체되고 클라이언트에 즉시 응답할 수 있습니다.
사전 요구 사항
- 2.1절. “부스터 프로젝트 생성” 섹션에 언급된 단계를 완료했습니다.
절차
다음 단계에 따라 Circuit breaker booster 프로젝트를 빌드하고 실행합니다.
쉘 프롬프트를 열고 Maven을 사용하여 명령줄에서 프로젝트를 빌드합니다.
cd PROJECT_DIR mvn clean package
cd PROJECT_DIR mvn clean package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 새 쉘 프롬프트를 열고 name 서비스를 시작합니다.
cd name-service mvn spring-boot:run -DskipTests -Dserver.port=8081
cd name-service mvn spring-boot:run -DskipTests -Dserver.port=8081
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Spring Boot가 시작되면 다음과 같은 몇 가지 출력이 표시됩니다.
... 2017-12-08 15:44:24.223 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Total 1 routes, of which 1 are started 2017-12-08 15:44:24.227 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.20.0 (CamelContext: camel-1) started in 0.776 seconds 2017-12-08 15:44:24.234 INFO 22758 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 4.137 seconds (JVM running for 4.744)
... 2017-12-08 15:44:24.223 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Total 1 routes, of which 1 are started 2017-12-08 15:44:24.227 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.20.0 (CamelContext: camel-1) started in 0.776 seconds 2017-12-08 15:44:24.234 INFO 22758 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 4.137 seconds (JVM running for 4.744)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 새 쉘 프롬프트를 열고 인사말 서비스를 시작합니다.
cd greetings-service mvn spring-boot:run -DskipTests
cd greetings-service mvn spring-boot:run -DskipTests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Spring Boot가 시작되면 다음과 같은 몇 가지 출력이 표시됩니다.
... 2017-12-08 15:46:58.521 INFO 22887 --- [ main] o.a.c.c.s.CamelHttpTransportServlet : Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=] 2017-12-08 15:46:58.524 INFO 22887 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-12-08 15:46:58.536 INFO 22887 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 6.263 seconds (JVM running for 6.819)
... 2017-12-08 15:46:58.521 INFO 22887 --- [ main] o.a.c.c.s.CamelHttpTransportServlet : Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=] 2017-12-08 15:46:58.524 INFO 22887 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-12-08 15:46:58.536 INFO 22887 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 6.263 seconds (JVM running for 6.819)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인사말 서비스는 URL
http://localhost:8080/camel/greetings
에서 REST 끝점을 노출합니다.http://localhost:8080으로 이동합니다.
이 페이지를 열면 서비스를 호출합니다.
이 페이지는 회로 차단기의 상태를 모니터링하는 Hystrix 대시보드에 대한 링크도 제공합니다.
Camel Hystrix에서 제공하는 회로 차단기 기능을 설명하기 위해 이름 서비스가 실행 중인 쉘 프롬프트 창에서 Ctrl+C 를 눌러 백엔드 이름 서비스를 종료합니다.
이제 이름 서비스를 사용할 수 없으므로 회로 차단기가 시작되어 인사말 서비스가 호출될 때 중단되지 않도록 합니다.
Hystrix Monitor 대시보드 및 서비스 출력에서 변경 사항을 확인합니다.
2.3. Externalized Configuration booster 빌드 및 실행 링크 복사링크가 클립보드에 복사되었습니다!
Externalized Configuration booster는 Apache Camel 경로에 대한 구성을 외부화하는 방법의 예를 제공합니다. Spring Boot 독립 실행형 배포의 경우 구성 데이터는 application.properties
파일에 저장됩니다.
OpenShift 배포에서 Fuse의 경우 구성 데이터는 ConfigMap 오브젝트에 저장됩니다.
사전 요구 사항
- 2.1절. “부스터 프로젝트 생성” 섹션에 언급된 단계를 완료했습니다.
절차
외부 구성 미션에 대한 2.1절. “부스터 프로젝트 생성” 단계를 수행한 후 다음 단계에 따라 로컬 머신의 독립 실행형 프로젝트로 외부 구성 부스터를 빌드하고 실행합니다.
- 프로젝트를 다운로드하고 로컬 파일 시스템에 아카이브를 추출합니다.
프로젝트를 빌드합니다.
cd PROJECT_DIR mvn clean package
cd PROJECT_DIR mvn clean package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스를 실행합니다.
mvn spring-boot:run
mvn spring-boot:run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow http://localhost:8080 에 대한 웹 브라우저를 엽니다. 이 페이지에서는 5초마다 서비스를 호출합니다. service는
target/classes/application.properties
파일의booster.nameToGreetvalue
를 사용하여 응답합니다.5초마다 "default"에 대한 인사말을 출력합니다.
booster.nameToGreet
값을 수정합니다.-
편집기에서
target/classes/application.properties
파일을 엽니다. booster.nameToGreetvalue
의 값을 기본값 에서 다른 값으로 변경합니다. 예를 들면 다음과 같습니다.booster.nameToGreetvalue=Thomas
booster.nameToGreetvalue=Thomas
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
편집기에서
- 터미널 창에서 CTRL+C 를 눌러 서비스를 중지합니다.
서비스를 다시 실행합니다.
mvn spring-boot:run
mvn spring-boot:run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 웹 브라우저에서 http://localhost:8080 페이지로 돌아가 서비스 결과 창에서 변경된 값을 확인합니다.
2.4. REST API booster 빌드 및 실행 링크 복사링크가 클립보드에 복사되었습니다!
REST API 레벨 0 미션은 REST 프레임워크를 사용하여 비즈니스 작업을 HTTP를 통해 원격 프로시저 호출 끝점에 매핑하는 방법을 보여줍니다. 이 미션은 worldardson Maturity 모델의 레벨 0에 해당합니다.
REST API 부스트러는 HTTP 프로토콜을 사용하여 원격(Apache Camel에서 노출됨) 서비스와 상호 작용하는 메커니즘을 도입합니다. 이 Fuse booster를 사용하면 신속하게 프로토타입을 생성하고 REST API를 유연하게 설계할 수 있습니다.
이 부스터를 사용하여 다음을 수행합니다.
-
camel/ Cryostatings/{name}
엔드포인트에서 HTTP GET 요청을 실행합니다. 이 요청은Hello, $name!
의 페이로드를 사용하여 JSON 형식으로 응답을 생성합니다. 여기서$name
은 HTTP GET 요청의 URL 매개변수 값으로 교체됩니다. -
URL
{name}
매개변수의 값을 변경하여 응답에 반영된 변경된 값을 확인합니다. - REST API의 Swagger 페이지를 확인합니다.
사전 요구 사항
- 2.1절. “부스터 프로젝트 생성” 섹션에 언급된 단계를 완료했습니다.
절차
다음 단계에 따라 로컬 머신에서 독립 실행형 프로젝트로 REST API booster를 빌드하고 실행합니다.
- 프로젝트를 다운로드하고 로컬 파일 시스템에 아카이브를 추출합니다.
프로젝트를 빌드합니다.
cd PROJECT_DIR mvn clean package
cd PROJECT_DIR mvn clean package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서비스를 실행합니다.
mvn spring-boot:run
mvn spring-boot:run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 웹 브라우저를 열고 다음을 수행합니다. http://localhost:8080
예제 HTTP GET 요청을 실행하려면 camel/ingressings/{name} 버튼을 클릭합니다.
localhost:8080/camel/ Cryostatings/Jacopo
URL을 사용하여 새 웹 브라우저 창이 열립니다. URL{name}
매개변수의 기본값은 Jacopo 입니다.JSON 응답은 브라우저 창에 표시됩니다.
{name}
매개변수 값을 변경하려면 URL을 변경합니다. 예를 들어 이름을 0.0.0.0으로 변경하려면 다음 URL을 사용합니다.localhost:8080/camel/ Cryostatings/ Thomas
.업데이트된 JSON 응답이 브라우저 창에 표시됩니다.
REST API의 Swagger 페이지를 보려면 API Swagger 페이지 버튼을 클릭합니다.
API swagger 페이지가 브라우저 창에서 열립니다.
3장. Red Hat Single Sign-On with Spring Boot 사용 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Single Sign-On 클라이언트 어댑터는 Red Hat Single Sign-On을 사용하여 애플리케이션 및 서비스를 매우 쉽게 보호할 수 있는 라이브러리입니다. Keycloak Spring Boot 어댑터를 사용하여 Spring Boot 프로젝트를 보호할 수 있습니다.
3.1. Spring Boot Container와 함께 Red Hat Single Sign-On 사용 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot 애플리케이션을 보호하려면 Keycloak Spring Boot 어댑터 JAR을 프로젝트에 추가합니다. Keycloak Spring Boot 어댑터는 Spring Boot의 자동 구성 기능을 사용하므로 Keycloak Spring Boot 시작기를 프로젝트에 추가하는 것입니다.
절차
Keycloak Spring Boot Starter를 수동으로 추가하려면 프로젝트의
pom.xml
에 다음을 추가합니다.<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> </dependency>
<dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-spring-boot-starter</artifactId> </dependency>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 어댑터 BOM 종속성을 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Keycloak을 사용하도록 Spring Boot 프로젝트를 구성합니다.
keycloak.json
파일 대신 일반 Spring Boot 구성을 사용하여 Spring Boot Keycloak 어댑터의 영역을 구성할 수 있습니다. 예를 들어src/main/resources/application.properties
파일에 다음 구성을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow keycloak.enabled = false
를 설정하여 Keycloak Spring Boot Adapter (예: 테스트에서)를 비활성화할 수 있습니다. policy Enforcer를 구성하려면keycloak.json
과 달리policy-enforcer-config
를policy-enforcer
대신 사용해야 합니다.web.xml
에서 Java EE 보안 구성을 지정합니다. Spring Boot Adapter는로그인 방법을
KEYCLOAK로 설정하고 시작 시security-constraints
를 구성합니다. 구성 예는 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고: Spring Application을 WAR로 배포하려는 경우 Spring Boot Adapter를 사용하지 마십시오. 사용 중인 애플리케이션 서버 또는 서블릿 컨테이너에 전용 어댑터를 사용합니다. Spring Boot에는
web.xml
파일도 포함되어야 합니다.
4장. Spring Boot에서 암호화된 속성 자리 표시자를 사용하는 방법 링크 복사링크가 클립보드에 복사되었습니다!
컨테이너를 보호하는 경우 구성 파일에서 일반 텍스트 암호를 사용하지 않는 것이 좋습니다. 일반 텍스트 암호를 사용하지 않는 한 가지 방법은 가능한 경우 암호화된 속성 자리 표시자를 사용하는 것입니다.
4.1. 값을 암호화하기 위한 마스터 암호 정보 링크 복사링크가 클립보드에 복사되었습니다!
Jasypt를 사용하여 값을 암호화하려면 마스터 암호가 필요합니다. 마스터 암호를 선택하는 것은 귀하 또는 관리자에게 달려 있습니다. Jasypt는 마스터 암호를 설정하는 몇 가지 방법을 제공합니다. Jasypt를 Spring 구성 프레임워크에 통합할 수 있으므로 구성 파일이 로드되면 속성 값이 암호 해독됩니다. 한 가지 방법은 Spring 부팅 구성에서 일반 텍스트로 마스터 암호를 지정하는 것입니다.
Spring은 PropertyPlaceholder
프레임워크를 사용하여 토큰을 속성 파일의 값으로 교체하고, Jasypt의 접근 방식은 PropertyPlaceholderConfigurer
클래스를 암호화된 문자열을 인식하고 암호 해독하는 클래스로 대체합니다.
예제
일반 텍스트로 마스터 암호를 지정하는 대신 환경 변수를 사용하여 마스터 암호를 설정할 수 있습니다. Spring Boot 구성 파일에서 이 환경 변수를 passwordEnvName
속성 값으로 지정합니다. 예를 들어 MASTER_PW
환경 변수를 마스터 암호로 설정하는 경우 Spring Boot 구성 파일에 이 항목이 있습니다.
<property name="passwordEnvName" value="MASTER_PW">
<property name="passwordEnvName" value="MASTER_PW">
4.2. Spring Boot에서 암호화된 속성 위치 소유자 사용 링크 복사링크가 클립보드에 복사되었습니다!
Jasypt를 사용하면 속성 소스에 대한 암호화를 제공하고 애플리케이션은 암호화된 속성을 해독하고 원래 값을 검색할 수 있습니다. 다음 절차에서는 Spring Boot에서 속성 소스를 암호화하고 해독하는 방법을 설명합니다.
절차
프로젝트의
pom.xml
파일에jasypt
종속성을 추가합니다.<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 프로젝트의 pom.xml에 Maven 리포지토리를 추가합니다.
<repository> <id>jasypt-basic</id> <name>Jasypt Repository</name> <url>https://repo1.maven.org/maven2/</url> </repository>
<repository> <id>jasypt-basic</id> <name>Jasypt Repository</name> <url>https://repo1.maven.org/maven2/</url> </repository>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Jasypt Maven 플러그인을 프로젝트에 추가하고 암호화 및 암호 해독에 Maven 명령을 사용할 수 있습니다.
<plugin> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-maven-plugin</artifactId> <version>3.0.3</version> </plugin>
<plugin> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-maven-plugin</artifactId> <version>3.0.3</version> </plugin>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pom.xml
에 plugin 리포지토리를 추가합니다.<pluginRepository> <id>jasypt-basic</id> <name>Jasypt Repository</name> <url>https://repo1.maven.org/maven2/</url> </pluginRepository>
<pluginRepository> <id>jasypt-basic</id> <name>Jasypt Repository</name> <url>https://repo1.maven.org/maven2/</url> </pluginRepository>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow application.properties
파일에 나열된 사용자 이름과 암호를 암호화하려면 다음과 같이DEC()
내에 이러한 값을 래핑합니다.spring.datasource.username=DEC(root) spring.datasource.password=DEC(Password@1)
spring.datasource.username=DEC(root) spring.datasource.password=DEC(Password@1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 사용자 이름과 암호를 암호화합니다.
mvn jasypt:encrypt -Djasypt.encryptor.password=mypassword
mvn jasypt:encrypt -Djasypt.encryptor.password=mypassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이는
application.properties
파일의 DEC() 자리 표시자를 암호화된 값으로 교체합니다. 예를 들면 다음과 같습니다.spring.datasource.username=ENC(3UtB1NhSZdVXN9xQBwkT0Gn+UxR832XP+tOOfFTlNL57FiMM7BWPRTeychVtLLhB) spring.datasource.password=ENC(4ErqElyCHjjFnqPOCZNAaTdRC7u7yJSy16UsHtVkwPIr+3zLyabNmQwwpFo7F7LU)
spring.datasource.username=ENC(3UtB1NhSZdVXN9xQBwkT0Gn+UxR832XP+tOOfFTlNL57FiMM7BWPRTeychVtLLhB) spring.datasource.password=ENC(4ErqElyCHjjFnqPOCZNAaTdRC7u7yJSy16UsHtVkwPIr+3zLyabNmQwwpFo7F7LU)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Spring 애플리케이션 구성 파일에서 자격 증명을 해독하려면 다음 명령을 실행합니다.
mvn jasypt:decrypt -Djasypt.encryptor.password=mypassword
mvn jasypt:decrypt -Djasypt.encryptor.password=mypassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
application.properties
파일의 내용이 암호화 이전과 같이 출력됩니다. 그러나 구성 파일은 업데이트하지 않습니다.
5장. Maven으로 빌드 링크 복사링크가 클립보드에 복사되었습니다!
Fuse에서 Spring Boot에 대한 애플리케이션을 개발하는 표준 접근 방식은 Apache Maven 빌드 툴을 사용하고 소스 코드를 Maven 프로젝트로 구성하는 것입니다. Fuse는 Maven 빠른 시작을 통해 빠르게 시작할 수 있으며 많은 Fuse 빌드 툴이 Maven 플러그인으로 제공됩니다. 이러한 이유로 Maven을 Fuse에서 Spring Boot 프로젝트에 대한 빌드 도구로 사용하는 것이 좋습니다.
5.1. Maven 프로젝트 생성 링크 복사링크가 클립보드에 복사되었습니다!
Fuse는 Spring Boot 애플리케이션의 초기 Maven 프로젝트를 생성하는 데 사용할 수 있는 Maven archetypes를 기반으로 다양한 빠른 시작을 제공합니다. 다양한 Maven archetypes의 위치 정보와 버전을 기억할 필요가 없도록 Fuse는 독립 실행형 Spring Boot 프로젝트에 대한 Maven 프로젝트를 생성하는 데 도움이 되는 툴링을 제공합니다.
5.1.1. developers.redhat.com/launch의 프로젝트 생성기 링크 복사링크가 클립보드에 복사되었습니다!
Fuse에서 Spring Boot 독립 실행형을 시작하는 가장 빠른 방법은 developers.redhat.com/launch 로 이동하여 Spring Boot 독립 실행형 런타임 지침을 따라 새 Maven 프로젝트를 생성하는 것입니다. 화면의 지침에 따라 로컬에서 빌드하고 실행할 수 있는 전체 Maven 프로젝트가 포함된 아카이브 파일을 다운로드하라는 메시지가 표시됩니다.
5.1.2. Developer Studio의 Fuse 툴링 마법사 링크 복사링크가 클립보드에 복사되었습니다!
또는 Red Hat JBoss Developer Studio(Fuse Tooling 포함)를 다운로드하여 설치할 수 있습니다. Fuse New Integration Project 마법사를 사용하여 새 Spring Boot 독립 실행형 프로젝트를 생성하고 Eclipse 기반 IDE 내에서 계속 개발할 수 있습니다.
5.2. Spring Boot BOM 사용 링크 복사링크가 클립보드에 복사되었습니다!
첫 번째 Spring Boot 프로젝트를 생성하고 빌드한 후 곧 더 많은 구성 요소를 추가하려고 합니다. 그러나 프로젝트에 추가할 Maven 종속 항목의 버전을 어떻게 알 수 있습니까? 가장 간단한(및 권장) 접근 방식은 관련 BOM(Bod of material) 파일을 사용하는 것입니다. 이 파일은 모든 버전 종속 항목을 자동으로 정의하는 것입니다.
5.2.1. BOM 파일 for Spring Boot 링크 복사링크가 클립보드에 복사되었습니다!
BOM(Maven bill of materials) 파일의 목적은 잘 작동하는 Maven 종속성 버전 집합을 제공하여 모든 Maven 아티팩트에 대해 버전을 개별적으로 정의할 필요가 없도록 하는 것입니다.
사용 중인 Spring Boot 버전에 따라 올바른 Fuse BOM을 사용하고 있는지 확인합니다.
Fuse BOM for Spring Boot는 다음과 같은 이점을 제공합니다.
- POM에 종속성을 추가할 때 버전을 지정할 필요가 없도록 Maven 종속 항목에 대한 버전을 정의합니다.
- 특정 버전의 Fuse에서 완전히 테스트 및 지원되는 선별된 종속성 세트를 정의합니다.
- Fuse 업그레이드 간소화.
Fuse BOM에서 정의한 종속성 세트만 Red Hat에서 지원합니다.
5.2.2. BOM 파일 통합 링크 복사링크가 클립보드에 복사되었습니다!
BOM 파일을 Maven 프로젝트에 통합하려면 프로젝트의 pom.xml
파일(또는 상위 POM 파일)에 dependencyManagement
요소를 지정합니다.
Spring Boot 2 BOM
종속성 관리 메커니즘을 사용하여 BOM을 지정한 후 아티팩트 버전을 지정하지 않고 Maven 종속성을 POM에 추가할 수 있습니다. 예를 들어 camel-hystrix
구성 요소에 대한 종속성을 추가하려면 POM의 종속성
요소에 다음 XML 조각을 추가합니다.
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hystrix-starter</artifactId> </dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-hystrix-starter</artifactId>
</dependency>
Camel 아티팩트 ID를 -starter
suffix Cryostat- Cryostat로 지정하는 방법에 유의하십시오. 즉 Camel Hystrix 구성 요소를
로 지정합니다. Camel 시작 구성 요소는 Spring Boot 환경에 최적화된 방식으로 패키지됩니다.
camel-hystrix
-starter
5.2.3. Spring Boot Maven 플러그인 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot Maven 플러그인은 Spring Boot에서 제공하며 Spring Boot 프로젝트를 빌드하고 실행하기 위한 개발자 유틸리티입니다.
-
프로젝트 디렉터리에
mvn 패키지를 입력하여 Spring Boot 애플리케이션에 대한 실행 가능한 Jar 패키지를
빌드 합니다. 빌드 출력은 Maven 프로젝트의target/
하위 디렉터리에 배치됩니다. -
편의를 위해
mvn spring-boot:start
명령을 사용하여 새로 빌드된 애플리케이션을 실행할 수 있습니다.
Spring Boot Maven 플러그인을 프로젝트 POM 파일에 통합하려면 다음 예와 같이 pom.xml
파일의 project/build/plugins
섹션에 플러그인 구성을 추가합니다.
예제
6장. Spring Boot에서 Apache Camel 애플리케이션 실행 링크 복사링크가 클립보드에 복사되었습니다!
Apache Camel Spring Boot 구성 요소는 Spring Boot에 대한 Camel 컨텍스트를 자동으로 구성합니다. Camel 컨텍스트의 자동 구성에서는 Spring 컨텍스트에서 사용할 수 있는 Camel 경로를 자동으로 감지하고 생산자 템플릿, 소비자 템플릿 및 유형 변환기와 같은 주요 Camel 유틸리티를 빈으로 등록합니다. Apache Camel 구성 요소에는 시작자를 사용하여 Spring Boot 애플리케이션을 개발할 수 있는 Spring Boot Starter 모듈이 포함되어 있습니다.
6.1. Camel Spring Boot 구성 요소 소개 링크 복사링크가 클립보드에 복사되었습니다!
모든 Camel Spring Boot 애플리케이션에서는 프로젝트의 pom.xml
의 dependencyManagement
요소를 사용하여 종속 항목의 제품화된 버전을 지정해야 합니다. 이러한 종속 항목은 Red Hat Fuse BOM에 정의되어 있으며 특정 Red Hat Fuse 버전에서 지원됩니다. BOM에서 버전을 재정의하지 않도록 추가 시작자의 버전 번호 속성을 생략할 수 있습니다. 자세한 내용은 퀵 스타트 pom 을 참조하십시오.
예제
camel-spring-boot
param에는 Spring Boot가 Camel 컨텍스트를 자동으로 구성할 수 있도록 해당 종속성을 클래스 경로에 추가할 수 있는 spring.factories
파일이 포함되어 있습니다.
6.2. Camel Spring Boot 시작 모듈 소개 링크 복사링크가 클립보드에 복사되었습니다!
시작자는 Spring Boot 애플리케이션에서 사용하기 위한 Apache Camel 모듈입니다. 각 Camel 구성 요소에는 camel-xxx-starter
모듈이 있습니다( 6.3절. “시작자가 없는 Camel 구성 요소 목록” 섹션에 몇 가지 예외가 나열되어 있음).
시작자는 다음 요구 사항을 충족합니다.
- IDE 툴링과 호환되는 네이티브 Spring Boot 구성 시스템을 사용하여 구성 요소의 자동 구성을 허용합니다.
- 데이터 형식 및 언어의 자동 구성을 허용합니다.
- Spring Boot 로깅 시스템과 통합하기 위해 전송형 로깅 종속성을 관리합니다.
- 추가 종속성을 포함하고 전송 종속성을 정렬하여 작동하는 Spring Boot 애플리케이션 생성 작업을 최소화합니다.
각 시작자는 현재 Spring Boot 릴리스와의 호환성을 확인하는 tests/camel-itest-spring-boot
에서 자체 통합 테스트를 갖습니다.
자세한 내용은 link: Apache Camel Spring-Boot 예제 를 참조하십시오.
6.3. 시작자가 없는 Camel 구성 요소 목록 링크 복사링크가 클립보드에 복사되었습니다!
다음 구성 요소에는 호환성 문제로 인해 시작 가능한 모듈이 없습니다.
- Camel-blueprint (OSGi에만 통합)
- Camel-cdi (CDB에만 권장)
- Camel-core-osgi (OSGi에만 해당)
- Camel- Cryostat (Jee에 대해서만 권장)
- Camel-eventadmin (OSGi 전용 통합)
-
Camel-ibatis (
camel-my topologyis-starter
포함) - camel-jclouds
-
Camel-mina (
camel-mina2-starter
포함) - Camel-paxlogging (OSGi 전용 통합)
-
Camel-quartz (
camel-quartz2-starter
포함) - camel-spark-rest
-
Camel-openapi-java (
camel-openapi-java-starter
포함)
6.4. Camel Spring Boot 시작 프로그램 사용 링크 복사링크가 클립보드에 복사되었습니다!
Apache Camel은 Spring Boot 애플리케이션 개발을 빠르게 시작할 수 있는 시작 모듈을 제공합니다.
절차
Spring Boot pom.xml 파일에 다음 종속성을 추가합니다.
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-spring-boot-starter</artifactId> </dependency>
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-spring-boot-starter</artifactId> </dependency>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 아래 코드 조각에 표시된 대로 Camel 경로가 포함된 클래스를 추가합니다. 이러한 경로가 클래스 경로에 추가되면 경로가 자동으로 시작됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: Camel이 유지되도록 기본 스레드를 차단하여 유지하려면 다음 중 하나를 수행하십시오.
-
spring-boot-starter-web
종속성을 포함합니다. 또는
application.properties
또는application.yml
파일에camel.springboot.main-run-controller=true
를 추가합니다.camel.springboot.* 속성을 사용하여
.application.properties
또는application.yml
파일에서 Camel 애플리케이션을 사용자 지정할 수 있습니다
-
선택 사항: Quarkus의 ID 이름을 사용하여 사용자 지정 useful을 참조하려면
src/main/resources/application.properties
(또는application.yml
) 파일에서 옵션을 구성합니다. 다음 예제에서는ans ID를 사용하여 xslt 구성 요소가 사용자 지정 8080을 참조하는 방법을 보여줍니다.myExtensionFactory
ID로 사용자 지정 8080을 참조하십시오.camel.component.xslt.saxon-extension-functions=myExtensionFactory
camel.component.xslt.saxon-extension-functions=myExtensionFactory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그런 다음 Spring Boot @Bean 주석을 사용하여 사용자 지정 8080을 만듭니다.
@Bean(name = "myExtensionFactory") public ExtensionFunctionDefinition myExtensionFactory() { }
@Bean(name = "myExtensionFactory") public ExtensionFunctionDefinition myExtensionFactory() { }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 jackson ObjectMapper의 경우
camel-jackson
data-format에서 다음을 수행하십시오.camel.dataformat.json-jackson.object-mapper=myJacksonMapper
camel.dataformat.json-jackson.object-mapper=myJacksonMapper
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5. Spring Boot의 Camel 컨텍스트 자동 구성 정보 링크 복사링크가 클립보드에 복사되었습니다!
Camel Spring Boot 자동 구성에서는 CamelContext
인스턴스를 제공하고 SpringCamelContext
를 생성합니다. 또한 해당 컨텍스트의 종료를 초기화하고 수행합니다. 이 Camel 컨텍스트는 camelContext
8080 이름 아래에 Spring 애플리케이션 컨텍스트에 등록되며 다른 Spring 8080과 마찬가지로 액세스할 수 있습니다. 아래 표시된 대로 camelContext
에 액세스할 수 있습니다.
예제
6.6. Spring Boot Applications에서 Camel 경로 자동 감지 링크 복사링크가 클립보드에 복사되었습니다!
Camel 자동 구성은 Spring 컨텍스트에서 모든 RouteBuilder
인스턴스를 수집하고 CamelContext
에 자동으로 삽입합니다. 이렇게 하면 Spring Boot 시작기를 사용하여 새 Camel 경로를 생성하는 프로세스가 간소화됩니다. 다음과 같이 경로를 생성할 수 있습니다.
예제
@Component
주석이 달린 클래스를 classpath에 추가합니다.
또는 @Configuration
클래스에 새 RouteBuilder
8080을 만듭니다.
6.7. Camel Spring Boot 자동 구성의 Camel 속성 구성 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot 자동 구성은 속성 자리 표시자, OS 환경 변수 또는 Camel 속성을 지원하는 시스템 속성과 같은 Spring Boot 외부 구성에 연결됩니다.
절차
application.properties
파일에서 속성을 정의합니다.route.from = jms:invoices
route.from = jms:invoices
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는 Camel 적절한 항목을 시스템 속성으로 설정합니다. 예를 들면 다음과 같습니다.
java -Droute.to=jms:processed.invoices -jar mySpringApp.jar
java -Droute.to=jms:processed.invoices -jar mySpringApp.jar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같이 구성된 속성을 Camel 경로에서 자리 표시자로 사용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8. 사용자 정의 Camel 컨텍스트 구성 링크 복사링크가 클립보드에 복사되었습니다!
Camel Spring Boot 자동 구성으로 생성된 CamelContext
8080에서 작업을 수행하려면 Spring 컨텍스트에 CamelContextConfiguration
인스턴스를 등록합니다.
절차
다음과 같이 Spring 컨텍스트에
CamelContextConfiguration
인스턴스를 등록합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
CamelContextConfiguration
및 beforeApplicationStart(CamelContext)
방법은 Spring 컨텍스트를 시작하기 전에 호출되므로 이 콜백에 전달되는 CamelContext
인스턴스는 완전히 자동으로 구성됩니다. CamelContextConfiguration
의 많은 인스턴스를 Spring 컨텍스트에 추가할 수 있으며 모든 인스턴스가 실행됩니다.
6.9. 자동 구성된 CamelContext에서 Cryostat 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
자동 구성된 CamelContext
에서 Cryostat를 비활성화하려면 기본적으로 Cryostat가 활성화되어 있으므로 camel.springboot.jmxEnabled
속성을 사용할 수 있습니다.
절차
application.properties
파일에 다음 속성을 추가하고false
로 설정합니다.camel.springboot.jmxEnabled = false
camel.springboot.jmxEnabled = false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.10. Spring 관리 빈에 자동 구성된 소비자 및 생산자 템플릿 삽입 링크 복사링크가 클립보드에 복사되었습니다!
Camel 자동 구성은 사전 구성된 ConsumerTemplate
및 ProducerTemplate
인스턴스를 제공합니다. 이를 Spring 관리 빈에 삽입할 수 있습니다.
예제
기본적으로 소비자 템플릿 및 생산자 템플릿에는 엔드포인트 캐시 크기가 1000으로 설정되어 있습니다. 예를 들어 다음 Spring 속성을 원하는 캐시 크기로 설정하여 이러한 값을 변경할 수 있습니다.
camel.springboot.consumerTemplateCacheSize = 100 camel.springboot.producerTemplateCacheSize = 200
camel.springboot.consumerTemplateCacheSize = 100
camel.springboot.producerTemplateCacheSize = 200
6.11. Spring 컨텍스트에서 자동 구성된 TypeConverter 정보 링크 복사링크가 클립보드에 복사되었습니다!
Camel 자동 구성에서는 Spring 컨텍스트에서 typeConverter
라는 TypeConverter
인스턴스를 등록합니다.
예제
6.12. Spring 유형 변환 API 브리지 링크 복사링크가 클립보드에 복사되었습니다!
Spring은 강력한 유형 변환 API 로 구성됩니다. Spring API는 Camel 유형 변환기 API 와 유사합니다. 두 API Camel Spring Boot 간의 유사점으로 인해 Spring 변환 API에 위임하는 브리지 변환기(SpringTypeConverter
)가 자동으로 등록됩니다. 즉, 즉시 사용 가능한 Camel은 Camel과 유사한 Spring Cryostat를 처리합니다.
이를 통해 다음과 같이 Camel TypeConverter
API를 사용하여 Camel 및 Spring 컨버터에 모두 액세스할 수 있습니다.
예제
여기에서 Spring Boot는 애플리케이션 컨텍스트에서 사용할 수 있는 Spring의 ConversionService
인스턴스로 변환을 위임합니다. ConversionService
인스턴스를 사용할 수 없는 경우 Camel Spring Boot 자동 구성으로 ConversionService
인스턴스가 생성됩니다.
6.13. 유형 변환 기능 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
Camel Spring Boot 유형 변환 기능을 비활성화하려면 camel.springboot.typeConversion
속성을 false
로 설정합니다. 이 속성을 false
로 설정하면 자동 구성에서 유형 변환기 인스턴스를 등록하지 않고 Spring Boot 유형 변환 API로 형식 변환 위임을 활성화하지 않습니다.
절차
Camel Spring Boot 구성 요소의 유형 변환 기능을 비활성화하려면 다음과 같이
camel.springboot.typeConversion
속성을false
로 설정합니다.camel.springboot.typeConversion = false
camel.springboot.typeConversion = false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.14. 자동 구성을 위해 classpath에 XML 경로 추가 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 Camel Spring Boot 구성 요소는 자동으로 감지되며 camel
디렉터리의 classpath에 있는 Camel XML 경로를 포함합니다. 구성 옵션을 사용하여 디렉터리 이름을 구성하거나 이 기능을 비활성화할 수 있습니다.
절차
다음과 같이 classpath에서 Camel Spring Boot XML 경로를 구성합니다.
// turn off camel.springboot.xmlRoutes = false // scan in the com/foo/routes classpath camel.springboot.xmlRoutes = classpath:com/foo/routes/*.xml
// turn off camel.springboot.xmlRoutes = false // scan in the com/foo/routes classpath camel.springboot.xmlRoutes = classpath:com/foo/routes/*.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고XML 파일은
CamelContext
요소가 아닌 Camel XML 경로 요소를 정의해야 합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Spring XML 파일 사용
<camelContext>와 함께 Spring XML 파일을 사용하려면 Spring XML 파일 또는 application.properties
파일에서 Camel 컨텍스트를 구성할 수 있습니다. Camel 컨텍스트의 이름을 설정하고 스트림 캐싱을 설정하려면 application.properties
파일에 다음을 추가합니다.
camel.springboot.name = MyCamel camel.springboot.stream-caching-enabled=true
camel.springboot.name = MyCamel
camel.springboot.stream-caching-enabled=true
6.15. 자동 구성을 위한 XML Rest-DSL 경로 추가 링크 복사링크가 클립보드에 복사되었습니다!
Camel Spring Boot 구성 요소는 camel-rest
디렉터리 아래의 classpath에 추가된 Camel Rest-DSL 경로를 자동으로 탐지하고 포함합니다. 구성 옵션을 사용하여 디렉터리 이름을 구성하거나 이 기능을 비활성화할 수 있습니다.
절차
다음과 같이 classpath에서 Camel Spring Boot Rest-DSL XML 경로를 구성합니다.
// turn off camel.springboot.xmlRests = false // scan in the com/foo/routes classpath camel.springboot.xmlRests = classpath:com/foo/rests/*.xml
// turn off camel.springboot.xmlRests = false // scan in the com/foo/routes classpath camel.springboot.xmlRests = classpath:com/foo/rests/*.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고Rest-DSL XML 파일은
CamelContext
요소가 아닌 Camel XML REST 요소를 정의해야 합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.16. Camel Spring Boot로 테스트 링크 복사링크가 클립보드에 복사되었습니다!
Camel이 Spring Boot에서 실행되면 Spring Boot에 @Component
로 주석이 추가된 Camel 및 모든 경로가 자동으로 포함됩니다. Spring Boot로 테스트할 때 @ContextConfiguration
대신 @SpringBootTest
를 사용하여 사용할 구성 클래스를 지정합니다.
다른 RouteBuilder 클래스에 Camel 경로가 여러 개인 경우 Camel Spring Boot 구성 요소는 애플리케이션을 실행할 때 이러한 모든 경로를 자동으로 포함합니다. 따라서 하나의 RouteBuilder 클래스에서만 경로를 테스트하려면 다음 패턴을 사용하여 활성화할 RouteBuilders를 포함하거나 제외할 수 있습니다.
- java-routes-include-pattern: 패턴과 일치하는 RouteBuilder 클래스를 포함하는 데 사용됩니다.
- java-routes-exclude-pattern: 패턴과 일치하는 RouteBuilder 클래스를 제외하는 데 사용됩니다. exclude는 include보다 우선합니다.
절차
다음과 같이
@SpringBootTest
주석에 대한 속성으로 단위 테스트 클래스에포함
또는제외
패턴을 지정합니다.@RunWith(CamelSpringBootRunner.class) @SpringBootTest(classes = {MyApplication.class); properties = {"camel.springboot.java-routes-include-pattern=**/Foo*"}) public class FooTest {
@RunWith(CamelSpringBootRunner.class) @SpringBootTest(classes = {MyApplication.class); properties = {"camel.springboot.java-routes-include-pattern=**/Foo*"}) public class FooTest {
Copy to Clipboard Copied! Toggle word wrap Toggle overflow FooTest
클래스에서 포함 패턴은**/Foo*
이며, 이는 Cryostat 스타일 패턴을 나타냅니다. 여기에서 패턴은 선행 패키지 이름과 일치하는 이중 별표로 시작됩니다./foo*
는 클래스 이름이 FooRoute로 시작해야 함을 의미합니다.다음 maven 명령을 사용하여 테스트를 실행합니다.
mvn test -Dtest=FooTest
mvn test -Dtest=FooTest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.17. Spring Boot, Apache Camel 및 외부 메시징 브로커 사용 링크 복사링크가 클립보드에 복사되었습니다!
Fuse는 외부 메시징 브로커를 사용합니다. 지원되는 브로커, 클라이언트 및 Camel 구성 요소 조합에 대한 자세한 내용은 지원되는 구성을 참조하십시오.
Camel 구성 요소는 JMS connection-factory에 연결되어 있어야 합니다. 아래 예제에서는 camel-amqp
구성 요소를 JMS 연결 요소에 연결하는 방법을 보여줍니다.
7장. Red Hat Fuse 애플리케이션 패치 링크 복사링크가 클립보드에 복사되었습니다!
새로운 patch-maven-plugin
메커니즘을 사용하여 Red Hat Fuse 애플리케이션에 패치를 적용할 수 있습니다. 이 메커니즘을 사용하면 서로 다른 Red Hat Fuse BOMS에서 제공하는 개별 버전을 변경할 수 있습니다(예: fuse-springboot-bom
및 fuse-karaf-bom
).
7.1. patch-maven-plugin 정보 링크 복사링크가 클립보드에 복사되었습니다!
patch-maven-plugin
은 다음 작업을 수행합니다.
- 현재 Red Hat Fuse BOM과 관련된 패치 메타데이터를 검색합니다.
-
BOMs에서 가져온 <
;dependencyManagement>
;에 버전 변경 사항을 적용합니다.
patch-maven-plugin
이 메타데이터를 가져온 후 플러그인이 선언된 프로젝트의 모든 관리 및 직접 종속 항목을 반복하고 CVE/patch 메타데이터를 사용하여 종속성 버전(동일한 경우)을 대체합니다. 버전이 교체되면 Maven 빌드가 계속되고 표준 Maven 프로젝트 단계를 통해 진행됩니다.
7.2. Red Hat Fuse 애플리케이션에 패치 적용 링크 복사링크가 클립보드에 복사되었습니다!
patch-maven-plugin 의 목적은 Red Hat Fuse BOM에 나열된 종속 항목의 버전을 애플리케이션에 적용하려는 패치의 패치 메타데이터에 지정된 버전으로 업데이트하는 것입니다.
절차
다음 절차에서는 애플리케이션에 패치를 적용하는 방법을 설명합니다.
프로젝트의
pom.xml
파일에patch-maven-plugin
을 추가합니다.patch-maven-plugin
의 버전은 Fuse BOM의 버전과 동일해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow mvn clean deploy
또는mvn validate
또는mvn dependency:tree
명령 중 하나를 실행하면, 플러그인은 프로젝트 모듈을 통해 Red Hat Fuse BOMs 중 하나를 사용하는지 확인합니다. 지원되는 BOM은 다음 두 가지로 간주됩니다.-
org.jboss.redhat-fuse:fuse-karaf-bom
: Fuse Karaf BOM -
org.jboss.redhat-fuse:fuse-springboot-bom
: Fuse Spring Boot BOM
-
위의 BOM을 찾을 수 없는 경우 플러그인은 다음 메시지를 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Fuse BOM이 둘 다 발견되면 다음 경고와 함께
patch-maven-plugin
이 중지됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow patch-maven-plugin
은 다음 Maven 메타데이터 값 중 하나를 가져옵니다.-
Fuse Karaf BOM을 사용하는 프로젝트의 경우
org.jboss.redhat-fuse/fuse-karaf-patch-metadata/maven-metadata.xml
이 해결되었습니다.org.jboss.redhat-fuse:fuse-karaf-patch-metadata:RELEASE
좌표를 사용하여 아티팩트의 메타데이터입니다. Fuse Spring Boot BOM 프로젝트를 사용하는 프로젝트의 경우
org.jboss.redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml
이 확인됩니다.org.jboss.redhat-fuse:fuse-springboot-patch-metadata:RELEASE
좌표를 사용하여 아티팩트의 메타데이터입니다.Maven에서 생성한 메타데이터의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Fuse Karaf BOM을 사용하는 프로젝트의 경우
-
patch-maven-plugin
은 현재 프로젝트에 적용할 수 있는 버전을 선택하기 위해 메타데이터를 구문 분석합니다. 이는 버전이 7.8.xxx 인 Fuse BOM을 사용하는 Maven 프로젝트에서만 가능합니다. 버전 범위 7.8, 7.9 이상과 일치하는 메타데이터만 적용할 수 있으며 최신 버전의 메타데이터만 가져옵니다. patch-maven-plugin
은 이전 단계에서 발견된groupId
,artifactId
및version
으로 식별된 패치 메타데이터를 다운로드할 때 사용할 원격 Maven 리포지토리 목록을 수집합니다. 이러한 Maven 리포지토리는 활성 프로필의 프로젝트의 <repositories
> 요소와settings.xml
파일의 리포지토리에도 나열됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택적으로 오프라인 리포지토리를 사용하려는 경우
-Dpatch
옵션을 사용하여jboss-fuse/redhat-fuse
프로젝트의fuse-karaf/fuse-patch-repository
또는fuse-springboot/fuse-springboot-patch-repository
모듈에서 생성하는 ZIP 파일을 지정할 수 있습니다. 이러한 ZIP 파일은 Maven 리포지토리 구조와 동일한 내부 구조를 갖습니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 메타데이터가 원격 리포지토리, 로컬 리포지토리 또는 ZIP 파일에서 제공되는지 여부에 따라
patch-maven-plugin
에 의해 분석됩니다. 가져온 메타데이터에는 CVE 목록이 포함되어 있으며 각 CVE에 대해 수정 사항이 포함된 버전과 함께 영향을 받는 Maven 아티팩트 목록(글러러 패턴 및 버전 범위에 의해 지정됨)이 있습니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 마지막으로 현재 프로젝트의 모든 관리 종속 항목을 반복할 때 패치 메타데이터에 지정된 수정 사항 목록을 참조합니다. 일치하는 이러한 종속 항목(및 관리되는 종속 항목)은 수정된 버전으로 변경됩니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
패치 건너뛰기
프로젝트에 특정 패치를 적용하지 않으려면 patch-maven-plugin
에서 skip
옵션을 제공합니다. 이미 patch-maven-plugin
을 프로젝트의 pom.xml
파일에 추가했으며 버전을 변경할 필요가 없다고 가정하면 다음 방법 중 하나를 사용하여 패치를 건너뛸 수 있습니다.
-
다음과 같이 프로젝트의
pom.xml
파일에 skip 옵션을 추가합니다.
-
또는 다음과 같이
mvn
명령을 실행할 때-DskipPatch
옵션을 사용합니다.
위 출력에 표시된 것처럼 patch-maven-plugin
이 호출되지 않아 패치가 애플리케이션에 적용되지 않습니다.
부록 A. Maven 사용 준비 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 Red Hat Fuse 프로젝트 빌드를 위한 Maven을 준비하는 방법을 간략하게 설명하고 Maven 아티팩트를 찾는 데 사용되는 Maven 좌표 개념을 소개합니다.
A.1. Maven 설정 준비 링크 복사링크가 클립보드에 복사되었습니다!
Maven은 Apache의 무료 오픈 소스 빌드 툴입니다. 일반적으로 Maven을 사용하여 Fuse 애플리케이션을 빌드합니다.
절차
- Maven 다운로드 페이지에서 Maven의 최신 버전을 다운로드합니다.
시스템이 인터넷에 연결되어 있는지 확인합니다.
프로젝트를 빌드하는 동안 기본 동작은 Maven이 외부 리포지토리를 검색하고 필요한 아티팩트를 다운로드하는 것입니다. Maven은 인터넷을 통해 액세스할 수 있는 리포지토리를 찾습니다.
Maven이 로컬 네트워크에 있는 리포지토리만 검색하도록 이 동작을 변경할 수 있습니다. 즉 Maven은 오프라인 모드에서 실행할 수 있습니다. 오프라인 모드에서 Maven은 로컬 리포지토리에서 아티팩트를 찾습니다. A.3절. “로컬 Maven 리포지토리 사용”을 참조하십시오.
A.2. Maven에 Red Hat 리포지토리 추가 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Maven 리포지토리에 있는 아티팩트에 액세스하려면 해당 리포지토리를 Maven의 settings.xml
파일에 추가해야 합니다. Maven은 사용자의 홈 디렉터리의 .m2
디렉터리에서 settings.xml
파일을 찾습니다. 사용자가 settings.xml
파일이 지정되지 않은 경우 Maven은 M2_HOME/conf/
에서 시스템 수준 settings.xml 파일을 사용합니다.
settings.xml
사전 요구 사항
Red Hat 리포지토리를 추가할 settings.xml
파일의 위치를 알고 있습니다.
절차
settings.xml
파일에서 다음 예와 같이 Red Hat 리포지토리의 리포지토리 요소를 추가합니다.
A.3. 로컬 Maven 리포지토리 사용 링크 복사링크가 클립보드에 복사되었습니다!
인터넷 연결 없이 컨테이너를 실행 중이고 오프라인에서 사용할 수 없는 종속성이 있는 애플리케이션을 배포해야 하는 경우 Maven 종속성 플러그인을 사용하여 애플리케이션의 종속 항목을 Maven 오프라인 리포지토리로 다운로드할 수 있습니다. 그런 다음 이 사용자 지정 Maven 오프라인 리포지토리를 인터넷 연결이 없는 시스템에 배포할 수 있습니다.
절차
pom.xml
파일이 포함된 프로젝트 디렉터리에서 다음과 같은 명령을 실행하여 Maven 프로젝트의 리포지토리를 다운로드합니다.mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.0:go-offline -Dmaven.repo.local=/tmp/my-project
mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.0:go-offline -Dmaven.repo.local=/tmp/my-project
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예에서는 프로젝트를 빌드하는 데 필요한 Maven 종속 항목 및 플러그인이
/tmp/my-project
디렉터리로 다운로드됩니다.- 이 사용자 지정 Maven 오프라인 리포지토리를 인터넷 연결이 없는 모든 시스템에 내부적으로 배포합니다.
A.4. Maven 아티팩트 및 좌표 정보 링크 복사링크가 클립보드에 복사되었습니다!
Maven 빌드 시스템에서 기본 빌딩 블록은 아티팩트 입니다. 빌드 후 아티팩트의 출력은 일반적으로 JAR 또는 WAR 파일과 같은 아카이브입니다.
Maven의 핵심 측면은 아티팩트를 찾고 해당 아티팩트 간의 종속성을 관리하는 기능입니다. Maven 좌표는 특정 아티팩트의 위치를 식별하는 값 집합입니다. 기본 조정에는 다음과 같은 세 가지 값이 있습니다.
groupId:artifactId:version
Maven은 패키지 값으로 기본 조정을 늘리거나 패키징 값과 분류자 값을 모두 사용하는 경우가 있습니다. Maven 조정에는 다음 양식 중 하나가 있을 수 있습니다.
groupId:artifactId:version groupId:artifactId:packaging:version groupId:artifactId:packaging:classifier:version
groupId:artifactId:version
groupId:artifactId:packaging:version
groupId:artifactId:packaging:classifier:version
값에 대한 설명은 다음과 같습니다.
- groupdId
-
아티팩트 이름의 범위를 정의합니다. 일반적으로 패키지 이름의 전체 또는 일부를 그룹 ID로 사용합니다. 예:
org.fusesource.example
. - artifactId
- 그룹 ID를 기준으로 아티팩트 이름을 정의합니다.
- 버전
-
아티팩트의 버전을 지정합니다. 버전 번호는 최대 4개의 부분(
n.n.n.n
.n)을 가질 수 있습니다. 여기서 버전 번호의 마지막 부분은 숫자가 아닌 문자를 포함할 수 있습니다. 예를 들어1.0-SNAPSHOT
의 마지막 부분은 영숫자 하위 문자열인0-SNAPSHOT
입니다. - 패키지
-
프로젝트를 빌드할 때 생성되는 패키지 엔터티를 정의합니다. OSGi 프로젝트의 경우 패키지는
번들
입니다. 기본값은 Cryostat입니다
. - 분류자
- 동일한 POM에서 빌드되었지만 콘텐츠가 다른 아티팩트를 구분할 수 있습니다.
아티팩트의 POM 파일의 요소는 다음과 같이 아티팩트의 그룹 ID, 아티팩트 ID, 패키징 및 버전을 정의합니다.
이전 아티팩트에 대한 종속성을 정의하려면 POM 파일에 다음 종속성
요소를 추가합니다.
번
들은 특정 종류의 JAR 파일일 뿐이고, Cryostat는 기본 Maven 패키지 유형이므로 이전 종속성에서 번들 패키지 유형을 지정할 필요가 없습니다. 종속성에서 명시적으로 패키징 유형을 지정해야 하는 경우
type
요소를 사용할 수 있습니다.
부록 B. Spring Boot Maven 플러그인 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot Maven 플러그인은 Maven에서 Spring Boot 지원을 제공하며 실행 가능한 issue 또는 war
아카이브를 패키징하고 애플리케이션을 인플레이스
로 실행할 수 있습니다.
B.1. Spring Boot Maven 플러그인 목표 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot Maven 플러그인의 목표는 다음과 같습니다.
-
Spring-boot:run
은 Spring Boot 애플리케이션을 실행합니다. -
spring-boot:repackage
는.jar
및.war
파일을 실행할 수 있도록 다시 패키징합니다. -
spring-boot:start
및spring-boot:stop
둘 다 Spring Boot 애플리케이션의 라이프사이클을 관리하는 데 사용됩니다. -
spring-boot:build-info
는 액추에이터가 사용할 수 있는 빌드 정보를 생성합니다.
B.2. Spring Boot Maven 플러그인 사용 링크 복사링크가 클립보드에 복사되었습니다!
Spring Boot 플러그인을 사용하는 방법에 대한 일반적인 지침은 https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/#using
에서 확인할 수 있습니다. 다음 예제에서는 Spring Boot에 spring-boot-maven-plugin
을 사용하는 방법을 보여줍니다.
Spring Boot Maven 플러그인에 대한 자세한 내용은 https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/ 링크를 참조하십시오.
B.2.1. Spring Boot 2에 Spring Boot Maven 플러그인 사용 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에서는 Spring Boot 2용 spring-boot-maven-plugin
을 사용하는 방법을 보여줍니다.
예제