2017-07-20 15 views
5

Trong dự án Java, tôi đang sử dụng Sprig Boot 1.5.3.RELEASE. Nó đang kết nối với hai cơ sở dữ liệu, tức là MongoDB và Microsoft SQLServer. Khi tôi chạy nó với spring-boot: chạy mục tiêu, nó hoạt động tốt. Tuy nhiên, khi tôi cố gắng chạy nó với gói mục tiêu sau đó bên dưới lỗi được báo cáo của trường hợp thử nghiệm mặc dù thực tế rằng những trường hợp thử nghiệm không được kết nối với cơ sở dữ liệu SQL Server:Không có loại đậu đủ điều kiện thuộc loại 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' có sẵn

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:467) 
    ..... 
    ..... 

MediationTest.java (lớp Java chứa trường hợp thử nghiệm tạo ra ở trên lỗi)

@RunWith(SpringRunner.class) 
@DataMongoTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class) 
@SpringBootTest(classes = { Application.class }) 
public class MediationTest { 

    @Autowired 
    private SwiftFormat swiftFormat; 
    ...................... 
    ...................... 

MsqlDbConfig.java

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(entityManagerFactoryRef = "msqlEntityManagerFactory", transactionManagerRef = "msqlTransactionManager", basePackages = { "com.msql.data" }) 
public class MsqlDbConfig { 

    @Bean(name = "msqlDataSource") 
    @ConfigurationProperties(prefix = "msql.datasource") 
    public DataSource dataSource() { 
     return DataSourceBuilder.create().build(); 
    } 

    @Bean(name = "msqlEntityManagerFactory") 
    public LocalContainerEntityManagerFactoryBean msqlEntityManagerFactory(
      EntityManagerFactoryBuilder builder, 
      @Qualifier("msqlDataSource") DataSource dataSource) { 
     return builder.dataSource(dataSource) 
       .packages("com.utils.msql.info") 
       .persistenceUnit("msql").build(); 
    } 

    @Bean(name = "msqlTransactionManager") 
    public PlatformTransactionManager msqlTransactionManager(
      @Qualifier("msqlEntityManagerFactory") EntityManagerFactory msqlEntityManagerFactory) { 
     return new JpaTransactionManager(msqlEntityManagerFactory); 
    } 
} 

application.properties

spring.data.mongodb.uri=mongodb://dev-abc-123:27017/db 

msql.datasource.url=jdbc:sqlserver://ABC-SQL14-WXX;databaseName=dev 
msql.datasource.username=dev 
msql.datasource.password=***** 
msql.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver 
msql.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect 
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy 
spring.jpa.show-sql=true 
+0

Không có ngoại lệ nào khác trong nhật ký không? – galovics

+0

Những thử nghiệm này có hoạt động khi bạn chạy chúng từ IDE của bạn không? – Ben

Trả lời

2

Các lò xo khởi động: chạy mục tiêu được xác định bởi Mojo bao gồm trong dự án xuân-boot-maven-plugin. Bạn có thể tìm thấy nó ở đây. https://github.com/spring-projects/spring-boot/blob/8e3baf3130220a331d540cb07e1aca263b721b38/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/RunMojo.java.

Phạm vi requiresDependencyResolution được đặt thành Kiểm tra. Điều này sẽ bao gồm các phụ thuộc từ mỗi giai đoạn trên classpath. Hãy xem đặc tả ở đây. https://maven.apache.org/developers/mojo-api-specification.html

Mục mục tiêu do Maven cung cấp sẽ không bao gồm những phụ thuộc bổ sung này trên đường dẫn lớp và tôi tin rằng đó là nguyên nhân của sự cố.

Khởi động mùa xuân cung cấp đóng gói mục tiêu là những gì nên được sử dụng để xây dựng các ứng dụng khởi động mùa xuân thực thi.

Tuy nhiên, để hiểu rõ hơn. Tôi nghĩ nếu bạn cập nhật thử nghiệm của mình để loại trừ một lớp bổ sung, nó có thể khắc phục được sự cố của bạn.

@DataMongoTest(excludeAutoConfiguration = {EmbeddedMongoAutoConfiguration.class, HibernateJpaAutoConfiguration.class})

Các vấn đề liên quan