이 방법은 하나 또는 두 개의 서버와 같은 소규모 프로젝트에만 적합하며 구성 파일을 직접 수정할 수 있습니다. 예를 들어, Spring MVC는 전쟁 패키지 형태로 배포되며 리소스의 구성 파일을 직접 수정할 수 있습니다. Spring Boot 프로젝트 이고이 메소드를 사용하려면 고정 디렉토리와 같은 외부 편집 가능한 파일을 참조해야합니다. 대부분의 Spring Boot는 JAR 패키지에 배포되며 패키지를 입력하는 구성 파일을 직접 수정할 수 없습니다. 비교적 큰 프로젝트 인 경우 CTRIP의 아폴로, 영사 등과 같은 구성 센터를 사용하는 것이 가장 좋습니다.
원래 방법
원래 메소드는 구성을 수정할 때마다 서버를 다시 포장하고 출시하는 것을 나타냅니다.
Spring MVC를 사용하여 개발을 완료 한 후 전쟁 패키지를 만들어 Tomcat에 배치 할 것입니다. 현재 SMS 인터페이스 주소를 수정 한 경우
다음을 수행해야합니다.
1. 구성 파일을 열고 구성 정보를 수정하십시오.
2. 컴파일 및 패키지;
3. Tomcat을 정지하고 이전 프로젝트 디렉토리를 삭제하십시오.
4. 새로운 전쟁 패키지를 WebApps에 넣고 Tomcat을 시작하십시오.
물론 Tomcat 에서이 프로젝트의 구성 파일을 직접 찾은 다음 수정할 수 있지만 Tomcat을 다시 시작해야합니다.
단지 개발이나 테스트를 수행한다면 약간의 시간 낭비가 될 수 있습니다. 그래서 나는 시간을 낭비하거나 Tomcat을 다시 시작하고 싶지 않습니다. 어떤 방법이 있습니까? 이것은 소개 할이 기사의 차례입니다.
WatchService 방법
Java는 운영 체제 자체 파일 모니터를 사용하여 디렉토리 및 파일을 모니터링하는 WatchService 인터페이스를 제공합니다. 모니터링 된 객체가 변경되면 신호 알림이있어 변경 사항을 효율적으로 발견 할 수 있습니다.
이 방법의 일반적인 원칙은 다음과 같습니다. 첫 번째, 새로운 모니터 (WatchService) 운영 체제에 따라 모니터링 할 디렉토리 또는 파일을 선택한 다음 모니터링 할 이벤트를 구독하여 모니터링, 삭제, 편집 및 모니터링 된 위치로 등록하십시오. 가입 이벤트에 해당하는 이벤트가 트리거되면 해당 논리가 실행됩니다.
코드부터 시작하겠습니다. 이것은 Spring MVC 프로젝트에 있으며 리소스 디렉토리가 모니터링됩니다.
@RepositoryPublic Class ConfigWatcher {Private STATIC Final Logger = LoggerFactory.getLogger (ConfigWatcher.class); 개인 정적 시계 서비스 WatchService; @PostConstruct public void init () {logger.info ( "구성 파일 모니터 시작"); try {watchservice = fileSystems.getDefault (). newWatchService (); url url = configwatcher.class.getResource ( "/"); Path Path = Paths.get (url.touri ()); PATH.REGISTER (WatchService, StandardWatcheventKinds.entry_Modify, StandardWatcheventKinds.entry_create); } catch (예외 e1) {e1.printstacktrace (); } / *** 모니터링 스레드 시작* / 스레드 WatchThread = 새 스레드 (new WatchThread ()); WatchThread.setdaemon (true); WatchThread.start (); / ** 후크를 닫기 위해 레지스터*/ 스레드 후크 = 새 스레드 (new Runnable () {@override public void run () {try {watchservice.close ();} catch (ioException e) {e.printstackTrace ();}}); runtime.getRuntime (). addShutdownHook (hook); } public class watchthread는 runnable {@override public void run () {while (true) {try {// 모니터링 풀에서 변경 사항을 얻으려고 시도합니다. for (watchEvent <?> event : watchKey.pollevents ()) {String editFilename = event.context (). toString (); logger.info (editfilename); /*** 구성되므로 구성*/} watchKey.Reset (); // 모니터링을 완료하려면 모니터를 한 번 재설정해야합니다. }}}}}코드는 매우 간단하며 한 눈에 이해할 수 있습니다. 프로젝트가 시작되면 FileSystems.getDefault (). NewWatchService ()를 사용하여 운영 체제를 기반으로하는 WatchService를 만듭니다. 그런 다음 리소스 디렉토리의 URL을 가져 와서 경로를 가져온 다음 경로 개체의 레지스터 메소드를 호출하고 모니터를 등록한 다음 편집 및 이벤트를 구독합니다. 이벤트는 StandardWatcheventkinds 클래스에 정의되며 네 가지 유형이 있습니다.
1. StandardWatcheventKinds#오버플로
2. StandardWatcheventKinds#Entry_Create
3. StandardWatcheventKinds#Entry_delete
4. StandardWatcheventKinds#Entry_Modify
그런 다음 WatchThread 스레드가 별도로 시작하여 변경 로직을 처리하고 변경이 발생할 때까지 Take () 메소드가 호출됩니다. 구성 파일이 변경되면 변경 사항을 모니터링하면 구성을 다시로드하도록 로직이 호출됩니다. 또한 각 변경이 발생한 후 모니터를 재설정하려면 WatchKey.Reset () 메소드를 호출해야합니다.
마지막으로 후크를 등록해야하며 JVM이 닫히면 모니터를 끄질 수 있습니다.
이 메소드를 사용하면 구성 변경이 변경되면 Tomcat으로 직접 이동하여 구성 파일을 수정할 수 있으며 다시 시작하지 않고도 적용 할 수 있습니다.
이 기사는 주로이 방법을 소개하며 위에서 언급 한이 방법을 소개합니다. 이 방법은 매우 간단한 프로젝트에만 적합합니다. 대규모 프로젝트의 경우보다 진보 된 방법이 필요합니다.
센터를 구성하는 방법
프로젝트의 복잡성이 점점 높아지면 구성 변경이 실시간, 회색체 릴리스, 환경, 클러스터 관리 구성 및 완전한 권한 및 감사 메커니즘이 프로젝트에서 고려 될 문제가 될 수 있습니다. 현재 구성 파일에만 의존하는 것은 무능한 것처럼 보입니다.
현재 가장 일반적으로 사용되는 구성 센터에는 ETCD, Zookeeper, Disconf, Apollo 등이 포함됩니다. Disconf와 Apollo는 완전한 기능과 UI를 지원하는 즉시 사용 가능합니다. 및 etcd와 kookeeper는 몇 가지 사용자 정의 개발이 필요합니다.
학생들은 자신의 필요에 따라 선택할 수 있으며보다 자세한 내용은 스스로 검색하고 실천할 수 있습니다.