Spring Boot配置类与测试期间的属性

时间:2018-11-12 15:06:56

标签: spring-boot properties spring-data-jpa h2

我对Spring Boot的自动配置经验很少。处理生产和测试的数据库配置的最佳实践是什么。

当前,我有一个用于生产的配置,该配置从属性文件读取数据库属性。实体管理器有什么区别或配置是什么。我不创建bean,而仅在文件中指定键值对。

但是,对于测试,我必须创建bean,否则消息将出现:

  

原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为'entityManagerFactory'的bean

目前,我的测试课程如下:

@RunWith(SpringRunner.class)
@ContextConfiguration(locations = { "classpath:test-context.xml" })
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "de.xxx.xxx", repositoryBaseClass = 
                                                ExtendedRepositoryImpl.class)
@EntityScan(basePackages = { "de.xxx.xxx" })
@ComponentScan(basePackages = { "de.xxx.xxx" })
@EnableJpaAuditing
@ActiveProfiles(profiles = { "test" })
public abstract class AbstractTestCase {

protected static final Log LOG = LogFactory.getLog(AbstractTestCase.class);
}

那么处理配置的最佳方法是什么。在Java中@Configuration或每个属性文件中?我什么时候应该使用一些东西?

更新1: 我添加了@DataJpaTest批注,并从@Configuration类中删除了@Bean。它仍然有效,但是最好的处理方法是什么?是否有指南来了解注释的神奇之处?

1 个答案:

答案 0 :(得分:0)

最佳实践是让Spring Boot使用application.properties文件https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties中的应用程序属性来配置bean。

您可以通过在application.propertiesresources/application.properties中使用单独的test/resources/application.properties文件来使用单独的配置。