Intellij项目的目录:
src/main/java/rewards/testdb/schema.sql
src/main/java/rewards/testdb/test-data.sql
src/main/java/rewards/testdb/config/alternate-datasource-config.xml
src/main/java/rewards/testdb/config/AlternateDataSourceConfigTests.java
正在测试的bean配置(来自alternate-datasource-config.xml):
<bean id="dataSource-createdFromList" class="org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean" lazy-init="true">
<property name="databaseName" value="rewards" />
<property name="databasePopulator">
<bean class="org.springframework.jdbc.datasource.init.ResourceDatabasePopulator">
<property name="scripts">
<util:list>
<value>classpath:rewards/testdb/schema.sql</value>
<value>classpath:rewards/testdb/test-data.sql</value>
</util:list>
</property>
</bean>
</property>
</bean>
我在单元测试中遇到错误:
Caused by: java.io.FileNotFoundException: class path resource [rewards/testdb/schema.sql] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
但是,如果我将目录修改为:
src/main/java/rewards/testdb/config/schema.sql
src/main/java/rewards/testdb/config/test-data.sql
src/main/java/rewards/testdb/config/alternate-datasource-config.xml
src/main/java/rewards/testdb/config/AlternateDataSourceConfigTests.java
并修改我的bean配置:
<bean id="dataSource-createdFromList" class="org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean" lazy-init="true">
<property name="databaseName" value="rewards" />
<property name="databasePopulator">
<bean class="org.springframework.jdbc.datasource.init.ResourceDatabasePopulator">
<property name="scripts">
<util:list>
<value>classpath:rewards/testdb/config/schema.sql</value>
<value>classpath:rewards/testdb/config/test-data.sql</value>
</util:list>
</property>
</bean>
</property>
</bean>
...我的测试通过了。
为什么?
答案 0 :(得分:1)
在您的构思项目配置中,将目标路径指向项目目标文件夹:编辑配置 - >部署 - &gt;编辑工件(点击铅笔图标) - &gt;将“输出目录”输入设置为“your_project_folder_path / target” 然后,无论何时编辑jdbc.properties文件,这都将在重新启动时生效。
这对maven web项目有效。
答案 1 :(得分:0)
Spring会将资源引用解释为相对(对您的测试类)。您应始终确保在资源引用中使用绝对路径,即:
<value>classpath:/rewards/testdb/schema.sql</value>
<value>classpath:/rewards/testdb/test-data.sql</value>
(注意资源规范中的初始正斜杠)