2017-08-17 9 views
0

は春のJDBCは、PROD用のプロパティファイルで指定することができます:異なるJMS接続ファクトリのインスタンス化

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

やテスト

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

ためしたがって、必要なjava.sql.DataSourceインスタンスをインスタンス化することが可能です依存ジェネリックコードの設定の概要

@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; 
} 

Is SpringでSpringのようなドライバとURLプロパティの文字列を使用して特定のタイプのjava.jms.ConnectionFactoryを設定することは可能ですか?

実際、私の目標は、テスト用にPRODとActiveMQ用のTibco接続ファクトリを使用することです。

答えて

0

バネプロファイルを使用して、テスト用に別のBeanをプルすることができます。また、テストファクトリで異なる接続ファクトリBeanを単純にオーバーライドすることもできます。

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); 
     } 

    }; 

} 

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

これは、我々は何をすべきかを正確です。しかし、今私はより柔軟な解決策を持ちたいと思っています。 –

+0

どのように柔軟性がありますか?単純なファクトリBeanを作成して、プロパティ値に基づいて別の実装を返すことができます。しかし、それは私には残酷だと思われます。 –

+0

私たちのアプリは、プロパティの設定を持つブラックボックスのようなものです。エンドツーエンドのテストを実装するには、プロパティファイルの変更だけでインフラストラクチャの実装を変更することができます。 –

関連する問題