2017-02-17 47 views
1

我已经将我的应用程序切换为使用两个数据源,代码运行正常,两者都被拾取,但是我的单元测试已经开始失败,代码在下面,非常感谢。春季引导两个数据源,单元测试停止工作

Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active). 
    at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:180) 
    at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:120) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 71 more 

application.properties(在主及在测试文件夹):

datasource.primary.url = <url> 
datasource.primary.username = <user> 
datasource.primary.password = <password> 

datasource.secondary.url = <url> 
datasource.secondary.username = <user> 
datasource.secondary.password = <pass> 

主程序:

@EnableAutoConfiguration 
@Configuration 
@EntityScan({"com.example.domain","com.example.common.domain"}) 
@PropertySource(value = "classpath:application.properties") 
@EnableScheduling 
    public class MyApplication { 

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

    } 

主数据源的配置:

@Configuration 
@EnableJpaRepositories(basePackages = "com.example.repository", 
entityManagerFactoryRef = "primaryEntityManagerFactory", 
transactionManagerRef = "primaryTransactionManager") 
@EnableTransactionManagement 
public class PrimaryConfiguration { 

@Bean 
@ConfigurationProperties(prefix = "datasource.primary") 
@Primary 
public DataSource primaryDataSource() 
{ 
    return DataSourceBuilder.create().build(); 
} 

@Bean 
@Primary 
public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(final EntityManagerFactoryBuilder builder) 
{ 
    return builder 
      .dataSource(primaryDataSource()) 
      .packages("uk.gov.dwp.pss.roc.domain") 
      .persistenceUnit("primaryPersistenceUnit") 
      .build(); 
} 

@Bean 
@Primary 
public JpaTransactionManager primaryTransactionManager(@Qualifier("primaryEntityManagerFactory") final EntityManagerFactory factory) 
{ 
    return new JpaTransactionManager(factory); 
} 
} 

次要配置等级:

@Configuration 
@EnableJpaRepositories(basePackages = "com.example.common.repository", 
entityManagerFactoryRef = "secondaryEntityManagerFactory", 
transactionManagerRef = "secondaryTransactionManager") 
@EnableTransactionManagement 
public class SecondaryConfiguration { 

@Bean 
@ConfigurationProperties(prefix = "datasource.secondary") 
public DataSource secondaryDataSource() 
{ 
    return DataSourceBuilder.create().build(); 
} 

@Bean 
public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(final EntityManagerFactoryBuilder builder) 
{ 
    return builder 
      .dataSource(secondaryDataSource()) 
      .packages("uk.gov.dwp.pss.commons.domain.security") 
      .persistenceUnit("secondaryPersistenceUnit") 
      .build(); 
} 

@Bean 
public JpaTransactionManager secondaryTransactionManager(@Qualifier("secondaryEntityManagerFactory") final EntityManagerFactory factory) 
{ 
    return new JpaTransactionManager(factory); 
} 

} 

库类:

public interface MyRepository extends JpaRepository<MyObject, String>,JpaSpecificationExecutor<MyObject> { 
} 

的单元测试类使用注释:

@SpringApplicationConfiguration(classes = MyApplication.class) 

回答

0

数据库驱动程序在运行测试用例并没有在类路径的自动配置发现设置。

0

由于@ndrone声明您需要设置您的数据库驱动程序。目前还不清楚您是否尝试使用AutoConfigureTestDatabase。如果是这样,你应该参考Spring Boot文档中的AutoConfigureTestDatabase

如果是这样,你可以指定嵌入式数据库使用下的测试(配置)使用情况:

@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2) 

否则,你可以修改你的application.properties在您的测试文件夹指定连接类型如:

datasource.primary.driver-class-name=org.h2.Driver 
datasource.secondary.driver-class-name=org.h2.Driver 
+0

我已将数据库驱动程序添加到我的应用程序属性文件中,但仍然得到完全相同的错误。我不是试图使用AutoConfigureTestDatabase – helpme7766