zoukankan      html  css  js  c++  java
  • SpringBoot 加载外部配置文件 不重启服务 自动更新外部配置

    常规启动类:

    @SpringBootApplication
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
    }

    加载外部配置文件启动类:

    工具类

    package cn.com.aia.robot.util;
    
    import cn.com.aia.robot.ReleaseRobotsApplication;
    import org.springframework.boot.SpringApplication;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.PropertiesLoaderUtils;
    
    public class ApplicationContextUtils {
    
        private static String[] args;
        private static ApplicationContext context;
    
        private ApplicationContextUtils() {
        }
    
        public static void init(ApplicationContext applicationContext, String[] args) {
            ApplicationContextUtils.context = applicationContext;
            ApplicationContextUtils.args = args;
        }
    
        public static void setApplicationContext(ApplicationContext applicationContext) {
            ApplicationContextUtils.context = applicationContext;
        }
    
        public static void setArgs(String[] args) {
            ApplicationContextUtils.args = args;
        }
    
        /**
         * 刷新ConfigurableApplicationContext,实现不重启服务,自动更新配置
         * Resource resource指向外部配置文件
         */
        public static void restart(Resource resource) throws Exception {
            if(context instanceof ConfigurableApplicationContext) {
                ((ConfigurableApplicationContext) context).close();
                SpringApplication app = new SpringApplication(ReleaseRobotsApplication.class);
                app.setDefaultProperties(PropertiesLoaderUtils.loadProperties(resource));
                ConfigurableApplicationContext applicationContext = app.run(args);
                ApplicationContextUtils.setApplicationContext(applicationContext);
            }
        }
    
        public static <T> T getBean(String beanName) {
            return (T) context.getBean(beanName);
        }
    
        public static <T> T getBean(Class<T> t) {
            return context.getBean(t);
        }
    }

    启动类

    @SpringBootApplication
    public class MyApplication {
    
        public static void main(String[] args) throws Exception {
            SpringApplication app = new SpringApplication(MyApplication.class);
            app.setDefaultProperties(PropertiesLoaderUtils.loadProperties(new PathResource(Paths.get("C:/xxx/xxx.properties"))));
            //app.setDefaultProperties(PropertiesLoaderUtils.loadProperties(new UrlResource("http://xxx/xxx.properties")));
            ConfigurableApplicationContext applicationContext = app.run(args);
            ApplicationContextUtils.init(applicationContext, args);
        }
    }
  • 相关阅读:
    【04】Vue 之 事件处理
    【03】Vue 之列表渲染及条件渲染
    【02】 Vue 之 数据绑定
    传递参数的模式最适合向函数传入大量可先参数的情形
    ie6 PNG图片透明
    实现表单的输入框当光标为当前时,去掉默认值
    SSIS ->> Environment Variables
    SQL Server ->> FileTable
    SQL Server ->> 间接实现COUNT(DISTINCT XXX) OVER(PARTITION BY YYY)
    SQL Server ->> EXECUTE AS LOGIN/USER和Revert表达式
  • 原文地址:https://www.cnblogs.com/bevis-byf/p/14373850.html
Copyright © 2011-2022 走看看