Spring Boot开发工具(IntelliJ)

8

我正在使用Spring Boot 1.3.0.M5,尝试利用devtools。这使您可以在开发过程中对应用程序进行更改,并且boot将重新加载应用程序。我已经看到了这个演示使用Java和Maven在STS中运作。

我正在尝试在IntelliJ 14.1中使用Groovy和Gradle,并遇到了一些问题。首先是我的Gradle Build依赖项。

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.codehaus.groovy:groovy")
    testCompile("org.springframework.boot:spring-boot-starter-test") 
}

我创建了一个控制器,并为“/”创建了一个映射。
package demo

import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class HomeController {

    @RequestMapping("/")
    public String home(){
        "Hello, SpringOne 2GX!"
    }

}

我能运行应用程序并访问http://localhost:8080,并看到字符串打印到屏幕上。如果我更改文件,因为IntelliJ不会在更改时进行编译,所以不会发生任何事情。 但是,如果您转到“构建”>“构建项目”,则可以在控制台中看到Spring Boot重新加载。所以这似乎是有效的,但是如果我返回根URL,则会出现以下错误,这基本上是如果没有控制器,您将看到的内容。

白标签错误页面

此应用程序没有对/error进行显式映射,因此您正在看到此作为回退。

Thu Sep 17 10:43:25 EDT 2015 发生了意外错误(类型=未找到,状态=404)。没有可用的消息

有人知道为什么重载对我无效吗?


如果你运行 gradle classes,它是否有效? - cfrick
你是使用 gradle bootRun 来运行这个吗? - cfrick
@cfrick bootRun 或 Run > 运行演示应用程序。 - Dan Vega
你能看到原始页面吗?也就是说,它没有重新加载,或者编译是否破坏了你的构建?不要去“Build > Make Project”,你可以尝试按下“CTRL + Shift + F9”吗? - F. Stephen Q
还有一个想法:看看这个GitHub问题(https://github.com/spring-projects/spring-boot/issues/3315)。 - F. Stephen Q
显示剩余3条评论
2个回答

8

最近我遇到了同样的问题。问题出在开发工具拦截更改的方式上。默认情况下,它等待1秒钟进行编译完成。如果在此时间后classpath上不存在类,则devtools认为已删除该类并在没有它的情况下重新启动应用程序。

在我的机器上,groovy通常需要3秒钟左右才能完成编译过程。因此,重启时会删除类。

解决此问题的方法是在application.properties文件中设置spring.devtools.restart.pollInterval属性的值大于1000(对我来说,4000效果很好)。


0

如果您指定要扫描的确切包,那就没问题了。例如:

@ComponentScan(basePackages = "com.lsj.web")
@EnableAutoConfiguration
public class PlatformApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(PlatformApplication.class, args);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接