springboot를 개발에 사용하는 과정에서 우리는 종종 다음과 같은 시나리오를 처리해야 합니다. 서비스가 시작되면 서비스 상태가 서비스 등록 센터(예: zk)에 등록되어야 서비스 상태가 변경될 때 , 장애 제거와 부하를 균형 있게 수행할 수 있습니다.
등록하는 두 가지 방법을 만났습니다.
1. Spring 웹 애플리케이션이 시작된 후 직접 등록합니다.
2 서블릿 컨테이너가 시작된 후 리스너를 통해 등록합니다.
이 기사에서는 zk에 등록하는 전통적인 솔루션을 사용하여 이 두 가지 등록 방법을 설명하는 데모를 사용합니다.
1. Spring 웹애플리케이션이 시작된 후 등록
먼저 코드를 살펴보겠습니다
@SpringBootApplication public class WebApplication { private static final Logger logger = LoggerFactory.getLogger(WebApplication.class); private static volatile boolean IS_REGISTRY = false; public static void main(String[] args) { ApplicationContext context = run(WebApplication.class, args); if (IS_REGISTRY) { logger.info("注册2: WebApplication启动完成后"); ZkClient zkClient = context.getBean(ZkClient.class); zkClient.register(); IS_REGISTRY = true; logger.info("注册2: 注册成功"); } } }
여기서는 WebApplication에서 zkClient를 가져와서 등록합니다.
여기서 한 가지 설명해야 할 것이 있습니다. 우리는 zkClient의 빈을 얻기 위해 ApplicationContext를 사용합니다. 그 이유는 webApplication의 초기화 프로세스 중에 모든 구성을 읽고 빈이 초기화되기 때문에 Autowired를 사용하여 빈을 주입할 수 없기 때문입니다. webApplication의 시작 프로세스 중에는 초기화가 완료될 때까지 Bean을 주입할 수 없습니다.
등록을 위한 세부 코드는 여기서 확장되지 않습니다.
2. 서블릿 컨테이너가 초기화된 후 리스너를 통해 등록하세요.
아직 코드를 먼저 작성하세요
@WebListener public class RegisterListener implements ServletContextListener { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); private static volatile boolean IS_REGISTRY = false; @Autowired private ZkClient zkClient; @Override public void contextInitialized(ServletContextEvent servletContextEvent) { try { if (!IS_REGISTRY) { logger.info("注册1: Servelet容器启动成功后"); zkClient.register(); logger.info("注册1: 注册成功"); } IS_REGISTRY = true; } catch (Exception e) { IS_REGISTRY = false; logger.info("注册1: 注册失败"); } } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { if (IS_REGISTRY) { zkClient.stop(); } } }
이 리스너는 ServletContextListener 인터페이스를 구현하고 @WebListener로 주석을 달아야 합니다. springboot 주석은 다음과 같은 리스너 작성 방법입니다.
서블릿 컨테이너가 성공적으로 시작된 후 이 리스너의 contextInitialized 메서드가 호출됩니다. 서블릿 컨테이너가 삭제되어 서비스를 제공할 수 없으면 리스너의 contextDestroyed 메서드가 호출됩니다. 즉, 이 리스너는 서블릿 컨테이너의 상태를 모니터링하고 있습니다.
그런 다음 애플리케이션 메인 클래스에서 리스너 구성만 열면 됩니다.
@ServletComponentScan @SpringBootApplication public class WebApplication { }
3. 이 두 가지 방법의 비교
http 프로토콜을 외부에 제공하는 웹 서비스의 경우 서블릿 컨테이너 등록이 의미적으로 더 명확해지지만 스프링 컨테이너를 시작하는 데 시간이 너무 오래 걸리면 서블릿이 나타날 수 있습니다. 초기화가 완료되어 등록이 완료되었으나 서비스에서 외부 접근에 대한 Gap Time을 제공할 수 없기 때문에 저는 주로 첫 번째 방법으로 등록을 합니다.
이 시나리오는 다음과 같습니다
서블릿이 성공적으로 등록된 후에도 웹 애플리케이션이 아직 실제로 시작되지 않았으며 현재로서는 서비스가 정상적인 액세스를 제공할 수 없음을 알 수 있습니다.
zk에서 두 등록이 성공적으로 이루어진 것을 볼 수 있습니다.
위 내용은 springboot에서 등록 서비스를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JVM은 JNI (JavanativeInterface) 및 Java 표준 라이브러리를 통한 운영 체제 API 차이를 처리합니다. 1. JNI는 Java 코드가 로컬 코드를 호출하고 운영 체제 API와 직접 상호 작용할 수 있습니다. 2. Java Standard Library는 통합 API를 제공하며,이 API는 내부적으로 다른 운영 체제 API에 매핑되어 코드가 플랫폼에서 실행되도록합니다.

modularityDoesNotDirectHeftJava'splatformincendence.java'splatformincendenceIngeasted whejvm, butModularItyInfluencesApplicationStructureAndmanagement, deploymentandDuffictionBecomeMoreferficaliticiboliticalWI

bytecodeinjavaistheintermediaterepresentation attenablesplatformincendence.1) javacodeiscompiledintobytecodestoredin.2) thejvminterpretsorcompilesthisbytecodeintomachinecodeartruntime, theCodeTorUnanynanynovice를 허용합니다

javaachievesplatformincendenceThoughthegroughthejavavirtualMachine (JVM), theexecutesByTecodeonAnyDeviceWitHajvm.1) javacodeiscompiledintobytecode.2) thejvm-mmectretsandexecutesThisteCodeIntomachineCificinStructions, 허용

Javagui 개발의 플랫폼 독립성은 과제에 직면하지만 Swing, Javafx, Unifying Locance, Performance Optimization, 타사 라이브러리 및 크로스 플랫폼 테스트를 사용하여 처리 할 수 있습니다. Javagui Development는 교차 플랫폼 일관성을 제공하는 것을 목표로하는 AWT 및 Swing에 의존하지만 실제 효과는 운영 체제마다 다릅니다. 솔루션은 다음과 같습니다. 1) Swing 및 Javafx 사용 GUI 툴킷으로 사용; 2) UIMANAGER.SETLOOKANDFEEL ()을 통해 외관을 통합합니다. 3) 다른 플랫폼에 맞게 성능을 최적화합니다. 4) apachepivot 또는 SWT와 같은 타사 라이브러리 사용; 5) 일관성을 보장하기 위해 크로스 플랫폼 테스트를 수행하십시오.

javadevelopmentisnotentirelyplatform-IndectionentDuetoSeveralFactors.1) JVMVARIATIONSAFFERFFERFORMANDBEHAVIORACROSSDIFFERENTOS.2) nativelibrariesViajniintrictionPlatform-specificiss.3) filepathsandsystempropertiesdifferbetweenplatectry. 4)

Java 코드는 다른 플랫폼에서 실행할 때 성능 차이가 있습니다. 1) JVM의 구현 및 최적화 전략은 OracleJDK 및 OpenJDK와 같이 다릅니다. 2) 메모리 관리 및 스레드 스케줄링과 같은 운영 체제의 특성도 성능에 영향을 미칩니다. 3) 적절한 JVM을 선택하여 JVM 매개 변수 및 코드 최적화를 조정하여 성능을 향상시킬 수 있습니다.

Java'SplatformIndenceHASLIMITATIONSINTERFORMANTOWORHEAD, 버전 컴포팅 가능성, 도전 과제, 플랫폼-특이 적 식품, 및 JVMINSTALLATION/MAYMENDENT.ThesefacteThe "WriteOnce, Runanywhere"


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
