spring-boot修改配置文件参数来控制静态变量

spring-boot项目会遇到这样一种情况,有一些工具的参数,在测试环境和生产环境是不一样的,对于非静态的参数,可以在properties配置文件里创建,然后用@value注解注入.

对于某些静态参数来说,可以通过项目初始化的时候,把参数值放进static和final修饰的map里,然后通过getKey的方式,得到静态参数.

步骤:

1.application启动类上反射获取bean对象

public static void main(String[] args) {
		ConfigurableApplicationContext run = SpringApplication.run(MqttApplication.class, args);

		ServerInit s = run.getBean(ServerInit.class);
		s.preHandle(run);
	}

2.初始化类

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@Configuration本身是继承自@Component,因此也可以和正常被@Component一样被扫描到,或使用autowired。

所以这个地方注解换成@Component也可以.

标题1里,获得了这个ServerInit 的bean对象,然后执行的是其preHandle方法,该方法参数为ConfigurableApplicationContext,

方法里边没有用到,用到了就可以用这个参数搞一些初始化的事情

@Configuration
public class ServerInit {
 
    public static final Map<String, String> MQTT_INFO = new HashMap<String, String>();


    @Value("${mq.send.queue}")
    private String queue;

    @Value("${mqtt.server.host}")
    private String host;
    @Value("${mqtt.server.userName}")
    private String userName;
    @Value("${mqtt.server.password}")
    private String password;
    @Value("${mqtt.client.topic}")
    private String topic;
    @Value("${mqtt.client.clientId}")
    private String clientId;


    /**
     * 初始化信息到内存中
     *
     * @param run
     */
    public void preHandle(ConfigurableApplicationContext run) {
        //将mqtt信息初始化
        MQTT_INFO.put("host", host);
        MQTT_INFO.put("userName", userName);
        MQTT_INFO.put("password", password);
        MQTT_INFO.put("topic", topic);
        MQTT_INFO.put("clientId", clientId);
        RabbitMQUtil.initFactory("开始搞");
        //启动mq监听
        startMq();

    }

 /**
     * 启动mq监听
     */
    private void startMq() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (true) {
                        sleep(200);
    //                   LOGGER.info("循环获取");
                        List<String> masgs = RabbitMQUtil.receiveMessages(queue, 4);
                        for (String msg : masgs) {
                            LOGGER.info("RabbitMQ接收" + msg.toString());
                            PublishMessage.start(msg);
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

}

猜你喜欢

转载自blog.csdn.net/reee112/article/details/86513683