春季启动测试:弹簧属性被忽略
Posted
技术标签:
【中文标题】春季启动测试:弹簧属性被忽略【英文标题】:Spring boot test: spring properties are ignored 【发布时间】:2021-08-24 10:19:35 【问题描述】:我在运行 springboottest 时遇到了一个奇怪的问题。
我的属性文件位于src/test/resources/application.properties
由于某种原因,与 h2 db 相关的属性被忽略了。所有 spring 命名空间的属性都是灰色的(其他属性被正确读取)。
# h2
spring.test.database.replace=none
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.platform=h2
spring.datasource.username=
spring.datasource.password=
spring.datasource.url=jdbc:h2:file:C:/devenv/java/h2/database/perscel3_sumo_test;MODE=Oracle;AUTO_SERVER=TRUE;
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.jpa.open-in-view=true
spring.jpa.hibernate.ddl-auto=create-drop
我的测试文件:
@Import(BatchTestConfig.class, DatabaseConfig.class)
@SpringBootTest(classes = Perscel3SumoBackendTestApplication.class )
@RunWith(SpringJUnit4ClassRunner.class)
@EnableJpaRepositories("be.cm.apps.press.perscel3.repository")
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class BatchConfigurationTest
@Autowired
@Qualifier("jobLauncherTestUtilsForOptIn")
private JobLauncherTestUtils jobLauncherTestUtils;
private JdbcTemplate jdbcTemplate;
@Autowired
@Qualifier("h2.testDataSource")
public void setDataSource(DataSource dataSource)
this.jdbcTemplate = new JdbcTemplate(dataSource);
@Test
public void testOptInJob() throws Exception
jdbcTemplate.update("delete from cm_members");
for (int i = 1; i <= 10; i++)
// jdbcTemplate.update("insert into cm_members values (?, 0, ?, 100000)",
// i, "customer" + i);
JobExecution jobExecution = jobLauncherTestUtils.launchJob();
Assert.assertEquals("COMPLETED", jobExecution.getExitStatus().getExitCode());
在控制台中仍然存在以下消息:
Starting embedded database: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
这不是我想要的。
虽然没有错误。我读的属性如下:
@SpringBootApplication(exclude = UserDetailsServiceAutoConfiguration.class)
@PropertySource(value = "classpath:application.properties")
public class Perscel3SumoBackendTestApplication
public static void main(String[] args)
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Brussels"));
SpringApplication.run(Perscel3SumoBackendTestApplication.class, args);
并且属性文件出现在target/test-classes
。
重点是在调试时访问数据库,所以我想要文件访问而不是内存。
【问题讨论】:
【参考方案1】:哈哈,没关系...我用我忘记的自定义数据源 bean 覆盖了它。 虽然问题的根源和我写这个 bean 的原因是 IntelliJ 中的一个烦人的错误,它声称它无法找到数据源,尽管它显然存在。
【讨论】:
以上是关于春季启动测试:弹簧属性被忽略的主要内容,如果未能解决你的问题,请参考以下文章