zoukankan      html  css  js  c++  java
  • SpringBoot注解内容的动态配置

    大家都知道,注解只能配置常量,在一些构架的开发中,有时候我们需要给注解动态配置一些值,或者想从配置文件中读取配置。直接在注解上配置是无法实现的,但是我们可以在拿到注解的值之后,再对这些值进行另外的操作。比如在注解上面配置占位符,在使用的时候,再对这些占位符进行替换。在RocketMQ的监听配置中,就使用了这个技术,如下代码所示:

    @RocketMQMessageListener(topic = "${game.server.config.business-game-message-topic}", consumerGroup = "gateway-message-consumer-group")
    public class GatewayMessageReceiveService implements RocketMQListener<MessageExt> {
          	@Override
    	public void onMessage(MessageExt message) {
         }
    }
    

    这里面RocketMQMessageListener注解配置的Topic就是配置的占位符,它会读取yml配置文件中的game.server.config.business-game-message-topic配置的值。那么它是怎么实现的呢?很简单,spring boot已经替换我们实现了,只需要调一下方法就可以了,如下面代码所示:

    container.setTopic(environment.resolvePlaceholders(annotation.topic()));
    

    比如,在服务器启动的时候,想在日志上面打印一下注解中topic的真实值,如下所示:

    	@Autowired
    	private Environment environment;
    
    	@PostConstruct
    	public void init() {
    		RocketMQMessageListener messageListener = this.getClass().getAnnotation(RocketMQMessageListener.class);
    	    String topic = environment.resolvePlaceholders(messageListener.topic());
    		logger.info("监听网关消息,topic:{},group:{}",topic,messageListener.consumerGroup());
    	}
    

    另外,简单了解一下在Spring 占们符以#和$开头的不同:

    ${key名称}

    1.用户获取外部文件中指定key的值
    2.可以在xml中配置,也可以出现在@value注解中
    3.一般用于获取数据库配置内容信息

    #{表达式}

    1.spring中el表达式的格式
    2.可以在xml中配置,也可以出现在@value注解中
    3.可以任意表达式,支持运算符

  • 相关阅读:
    php CI框架基础知识
    1206 多表单提交,强类型
    1205 Mvc的Razor语法
    1204 Mvc
    1117 邮件验证
    1115 模板页
    1113 Ajax
    1110 Jquary动画
    1108 Jquary
    1107 Linq高级查询
  • 原文地址:https://www.cnblogs.com/wgslucky/p/12294065.html
Copyright © 2011-2022 走看看