微服務-實現服務重啟


我們要實現一個微服務監控平台修改配置文件的功能

配置問文件在修改完之后就需要重啟才能生效,就有了這個需要

下面是實現的步驟:

在注冊在Eureka中的服務中:

(1)修改啟動類

package com.googosoft.instances;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
public class InstancesApplication 
{    
     public static String[] args;
        public static ConfigurableApplicationContext context;
     
        public static void main(String[] args) {
            InstancesApplication.args = args;
            InstancesApplication.context = SpringApplication.run(InstancesApplication.class, args);
        }
}

(2)添加外部接口

package com.googosoft.instances.controller;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.googosoft.instances.InstancesApplication;

/** 
* @author songyan 
* @version 2020年1月20日 上午9:29:29 
* @desc
*/
@RestController
public class RestartController {

    @RequestMapping("/reStart")
    public String restart() {
        ExecutorService threadPool = new ThreadPoolExecutor(1, 1, 0,
                TimeUnit.SECONDS, new ArrayBlockingQueue<>(1), new ThreadPoolExecutor.DiscardOldestPolicy());
        threadPool.execute(() -> {
            InstancesApplication.context.close();
            InstancesApplication.context = SpringApplication.run(InstancesApplication.class,
                    InstancesApplication.args); 
        });
        threadPool.shutdown();
        return "spring.application.name:" + name;
    }
 
}

這樣就可以通過各個服務的reStart接口來實現服務的重啟了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM