通过驱动程序名称和URL

时间:2017-08-17 21:38:42

标签: java jms activemq spring-jdbc spring-jms

Spring JDBC允许在属性文件中指定PROD:

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

Spring是否可以通过驱动程序和URL属性配置特定类型的java.jms.ConnectionFactory'像Spring JDBC一样的字符串?

实际上,我的目标是使用Tibco连接工厂进行PROD和ActiveMQ进行测试。

1 个答案:

答案 0 :(得分:0)

您可以使用弹簧配置文件引入不同的Bean进行测试,或者您可以在测试用例中使用不同的Bean覆盖连接工厂bean。

修改

@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