从intellij运行时,Spring的初始化方式不同



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:binapache-maven-3.3.1bin..
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: C:binjavajdk1.8.0_60jre
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:binjavajdk1.8.0_60binjava  
  -Dmaven.multiModuleProjectDirectory=C:dev 
  -Dmaven.home=C:binapache-maven-3.3.1 
  -Dclassworlds.conf=C:binapache-maven-3.3.1binm2.conf 
  -Dfile.encoding=windows-1252 
  -classpath 
     C:binapache-maven-3.3.1bootplexus-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,然后是File->Invalidate Caches and Restart。

最新更新