簡體   English   中英

如何將屬性占位符傳遞給YAML配置文件中的注釋?

[英]How can I pass properties placeholder to annotations from YAML config file?

我想將配置屬性從YAML文件傳遞給注釋值,例如: @SendTo(value = "${config.ws.topic}") ,但出現錯誤

無法解析占位符config.ws.topic等。

我的代碼:

@MessageMapping("/chat.register")
@SendTo("${config.websocket.topic}")
public Message addUser(@Payload Message message,
                       SimpMessageHeaderAccessor headerAccessor) {
    headerAccessor.getSessionAttributes().put("username", message.getSender());
    return message;

}

道具文件:

server:
  address: 127.0.0.1
  port: 8080

config:
  websocket:
    endpoint: /ns/ws/endpoint
    appPrefix: /ns/ws
    topic: /ns/ws/ns-topic

道具配置類:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(value = "config.websocket")
public class WebSocketConfigurationProperties {
  private String endpoint;
  private String appPrefix;
  private String topic;

public String getEndpoint() {
    return endpoint;
}

public void setEndpoint(String endpoint) {
    this.endpoint = endpoint;
}

public String getAppPrefix() {
    return appPrefix;
}

public void setAppPrefix(String appPrefix) {
    this.appPrefix = appPrefix;
}

public String getTopic() {
    return topic;
}

public void setTopic(String topic) {
    this.topic = topic;
} 
}

您能建議我如何將配置屬性傳遞給注釋@SendTo嗎?

如果您嘗試將值從application.yml映射到配置類,則可以簡單地使用@Value來實現此目的。

在您的控制器中,只需創建變量即可保存來自application.yml的信息,如下所示

@Value("${config.ws.topic}")
String topic;

您的控制器將如下所示

@MessageMapping("/chat.register")
@SendTo(topic)
public Message addUser(@Payload Message message,
                       SimpMessageHeaderAccessor headerAccessor) {
    headerAccessor.getSessionAttributes().put("username", message.getSender());
    return message;

}

編輯1:由於以下錯誤, 屬性值必須恆定 ,可以解決此問題。

@Value("${config.ws.topic}")
String topic;

public static final String TOPIC_VALUE = "" + topic;

您的控制器將如下所示

@MessageMapping("/chat.register")
@SendTo(TOPIC_VALUE)
public Message addUser(@Payload Message message,
                       SimpMessageHeaderAccessor headerAccessor) {
    headerAccessor.getSessionAttributes().put("username", message.getSender());
    return message;


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM