2017-10-25 1 views
1

mein Problem ist, wie folgt So initialisiert. Leider unterstützt spring AMQP derzeit keine amqps-URIs voller Länge und das Hinzufügen von Unterstützung ist in der Prioritätenliste nicht hoch (siehe Problem: https://github.com/spring-projects/spring-boot/issues/6401). Sie müssen getrennt werden.nach einem Weg suchen Werte in springboot application.yml Datei vor SpringBootApplication zu analysieren ist

Die folgenden Felder sind in meinem application.yml erforderlich zu verbinden:

bietet
spring: 
    rabbitmq: 
    host: hostname 
    port: portnumber 
    username: username 
    password: password 
    virtual-host: virtualhost 
    ssl: 
     enabled: true 

Meine VCAP_Services Umgebung für meine RabbitMQ Instanz nur die Virtualhost und die volle Länge uri in folgendem Format: amqps://username:[email protected]:portnumber/virtualhost

Kopieren und Einfügen dieser Werte in meine application.yml ist im Moment in Ordnung, aber auf lange Sicht nicht praktikabel. Sie müssen von vcap_services kommen.

Meine @SpringBootApplication hat @Beans, die beim Start eine Verbindung zur rabbitMQ-Instanz initialisieren, also suche ich nach einer Möglichkeit, die einzelnen Werte auszuwerten und sie vor dem Start der Anwendung zu setzen.

Antwort

0

Wenn Sie beim Lesen der Eigenschaften nur daran interessiert sind, bevor Sie Ihre Frühlings-Boot-Anwendung initialisiert wird, können Sie die YAML-Datei mit Spring analysieren YamlPropertiesFactoryBean, bevor Sie anrufen SpringApplication.run. Zum Beispiel

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) {  
     YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean(); 
     yamlFactory.setResources(new ClassPathResource("application.yml")); 
     Properties props = yamlFactory.getObject(); 

     String hostname = props.getProperty("spring.rabbitmq.hostname"); 
     ... 

     SpringApplication.run(Application.class, args); 
    } 
} 
+0

Während ich mit Garys Lösung gegangen bin, akzeptiere ich das, weil es die ursprüngliche Frage beantwortet, danke. – treevez

0

Einfach Boot-Automobil projektierte Verbindung Fabrik außer Kraft setzen ...

@SpringBootApplication 
public class So46937522Application { 

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

    @Bean 
    public CachingConnectionFactory rabbitConnectionFactory(RabbitProperties config) 
      throws Exception { 
     CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); 
     connectionFactory.getRabbitConnectionFactory() 
      .setUri("amqps://guest:[email protected]:5671/virtualhost"); 
     return connectionFactory; 
    } 

    @RabbitListener(queues = "si.test.queue") 
    public void listen(Message in) { 
     System.out.println(in); 
    } 

} 
+0

Danke Gary, das hat gut funktioniert und ist ursprünglich, was ich suchte, obwohl die ConnectionFactory- Klasse schien nicht die getRabbitConnectionFactory Methode zu haben, so dass ich hinein schauen nicht so viel. Dies scheint die beste Lösung für das verknüpfte GitHub-Problem zu sein. – treevez

Verwandte Themen