当 运行 来自 intellij 时,Spring 的初始化不同
Spring initializes differently when run from intellij
我想要的 intellij 工作流程是右键单击一个 junit @Test
注释方法,然后选择 "run method()"。
由于以下错误,目前无法使用:Could not resolve placeholder 'spring.datasource.url' in string value "${spring.datasource.url}"
这是因为那个值 spring.datasource.url
没有在我的 application.properties
文件中定义,而是在单独的配置文件中定义。
我的集成测试是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Api.class)
@IntegrationTest
@WebAppConfiguration
@ActiveProfiles(profiles = "h2")
public class ServiceIntegrationTest {
application-h2.properties
已定义 spring.datasource.url
。
当我从命令行 运行 mvn test
时,我没有得到上面的错误。
问题:
- 为什么我的测试 运行在 maven 下正确而不是 intellij?
- intellij 是否以某种方式覆盖了
spring.profiles.active
?
- 是否可以覆盖在
@ActiveProfiles
注释中设置的活动配置文件?
注意:这些是集成测试,但是当运行从intellij进行单元测试时,我得到了相同的行为。
编辑:
C:\intellij-terminal>mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-13T15:10:27-05:00)
Maven home: C:\bin\apache-maven-3.3.1\bin\..
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: C:\bin\java\jdk1.8.0_60\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
编辑:还尝试将 spring.profiles.active=h2
添加到 intellij 测试 运行 配置中。
编辑: 我注意到 intellij 使用这个命令开始我的测试:
C:\bin\java\jdk1.8.0_60\bin\java
-Dmaven.multiModuleProjectDirectory=C:\dev
-Dmaven.home=C:\bin\apache-maven-3.3.1
-Dclassworlds.conf=C:\bin\apache-maven-3.3.1\bin\m2.conf
-Dfile.encoding=windows-1252
-classpath
C:\bin\apache-maven-3.3.1\boot\plexus-classworlds-2.5.2.jar
org.codehaus.classworlds.Launcher
-Didea.version=14.1.5
org.springframework.boot:spring-boot-maven-plugin:1.2.5.RELEASE:run
问题:
- 为什么 intellij 试图 运行 我的应用程序?
- 有没有办法告诉 intellij 使用指向单个测试的 maven 命令?
我删除了 .idea/
和我项目的 iml
文件并重新导入。这解决了问题。
我很高兴删除 .iml 文件成功了。
另一种可能...
mvn package -U
然后是文件 -> 使缓存无效并重新启动。
我想要的 intellij 工作流程是右键单击一个 junit @Test
注释方法,然后选择 "run method()"。
由于以下错误,目前无法使用:Could not resolve placeholder 'spring.datasource.url' in string value "${spring.datasource.url}"
这是因为那个值 spring.datasource.url
没有在我的 application.properties
文件中定义,而是在单独的配置文件中定义。
我的集成测试是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Api.class)
@IntegrationTest
@WebAppConfiguration
@ActiveProfiles(profiles = "h2")
public class ServiceIntegrationTest {
application-h2.properties
已定义 spring.datasource.url
。
当我从命令行 运行 mvn test
时,我没有得到上面的错误。
问题:
- 为什么我的测试 运行在 maven 下正确而不是 intellij?
- intellij 是否以某种方式覆盖了
spring.profiles.active
? - 是否可以覆盖在
@ActiveProfiles
注释中设置的活动配置文件?
注意:这些是集成测试,但是当运行从intellij进行单元测试时,我得到了相同的行为。
编辑:
C:\intellij-terminal>mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-13T15:10:27-05:00)
Maven home: C:\bin\apache-maven-3.3.1\bin\..
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: C:\bin\java\jdk1.8.0_60\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
编辑:还尝试将 spring.profiles.active=h2
添加到 intellij 测试 运行 配置中。
编辑: 我注意到 intellij 使用这个命令开始我的测试:
C:\bin\java\jdk1.8.0_60\bin\java
-Dmaven.multiModuleProjectDirectory=C:\dev
-Dmaven.home=C:\bin\apache-maven-3.3.1
-Dclassworlds.conf=C:\bin\apache-maven-3.3.1\bin\m2.conf
-Dfile.encoding=windows-1252
-classpath
C:\bin\apache-maven-3.3.1\boot\plexus-classworlds-2.5.2.jar
org.codehaus.classworlds.Launcher
-Didea.version=14.1.5
org.springframework.boot:spring-boot-maven-plugin:1.2.5.RELEASE:run
问题:
- 为什么 intellij 试图 运行 我的应用程序?
- 有没有办法告诉 intellij 使用指向单个测试的 maven 命令?
我删除了 .idea/
和我项目的 iml
文件并重新导入。这解决了问题。
我很高兴删除 .iml 文件成功了。
另一种可能...
mvn package -U
然后是文件 -> 使缓存无效并重新启动。