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进行测试。
答案 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