2017-08-17 2 views
0

Spring JDBC permet de spécifier dans les propriétés fichier pour PROD:Différentes usines de connexion JMS instanciation via le nom du pilote et URL

jdbc.driverClassName = oracle.jdbc.OracleDriver 
jdbc.url = jdbc:oracle:thin:@... 

et pour les tests

jdbc.driverClassName = org.h2.Driver 
jdbc.url = jdbc:h2:mem:test;INIT=... 

Ainsi, il est possible d'instancier nécessaire java.sql.DataSource instance dépend des paramètres de configuration avec le code générique

@Bean 
public DataSource dataSource(
     @Value("${jdbc.driverClassName}") String driverClass, 
     @Value("${jdbc.url}") String url, 
     @Value("${jdbc.username}") String username, 
     @Value("${jdbc.password}") String password 
) { 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(url, username, password); 
    dataSource.setDriverClassName(driverClass); 
    return dataSource; 
} 

-il possible à Spring de configurer le type spécifique de java.jms.ConnectionFactory via les propriétés des pilotes et des propriétés d'URL comme dans Spring JDBC?

En fait, mon objectif est d'utiliser la fabrique de connexions Tibco pour PROD et ActiveMQ pour les tests.

Répondre

0

Vous pouvez utiliser des profils de ressort pour extraire un autre bean pour les tests ou vous pouvez simplement remplacer le bean de la fabrique de connexions par un différent dans le scénario de test.

EDIT

@Bean 
public FactoryBean<ConnectionFactory> connectionFactory(@Value("${jms.url}") final String urlProp) { 
    return new AbstractFactoryBean<ConnectionFactory>() { 

     @Override 
     public Class<?> getObjectType() { 
      if (urlProp.startsWith("activemq:")) { 
       return ActiveMQConnectionFactory.class; 
      } 
      // ... 
      throw new RuntimeException("bad url: " + urlProp); 
     } 

     @Override 
     protected ConnectionFactory createInstance() throws Exception { 
      if (urlProp.startsWith("activemq:")) { 
       URI uri = new URI(urlProp.substring(urlProp.indexOf(":") + 1)); 
       return new ActiveMQConnectionFactory(uri); 
      } 
      // ... 
      throw new RuntimeException("bad url: " + urlProp); 
     } 

    }; 

} 

et

jms.url=activemq:vm://localhost 
+0

C'est exactement ce que nous faisons. Mais maintenant je voudrais avoir une solution plus flexible. –

+0

Plus flexible de quelle façon? Vous pouvez créer un bean factory simple pour renvoyer une implémentation différente en fonction d'une valeur de propriété. Mais cela me semble trop compliqué. –

+0

Notre application est une sorte de boîte noire avec config dans les propriétés. Pour mettre en œuvre des tests de bout en bout, il est bon d'avoir la possibilité de changer les implémentations infra avec seulement des changements de fichiers de propriétés. –