Spring引导、Spring加载、Eclipse、Maven基本示例

Spring引导、Spring加载、Eclipse、Maven基本示例,eclipse,maven,spring-boot,spring-loaded,Eclipse,Maven,Spring Boot,Spring Loaded,我发现,根据文档,带弹簧加载的Spring Boot的基本示例设置不起作用。我按照上的说明创建了一个基本应用程序,唯一的区别是我将类放入了一个包中,并使用了父pom的发布版本。应用程序运行良好。然后,我将spring loaded添加到pom文件中,如doco中所述 我使用mvn spring boot:run运行应用程序 将我的控制器输出(例如“Hello World”更改为“Hello me”)不会进行热重新加载 我试着用其他地方描述的javaagent命令行参数作为java应用程序运行,但

我发现,根据文档,带弹簧加载的Spring Boot的基本示例设置不起作用。我按照上的说明创建了一个基本应用程序,唯一的区别是我将类放入了一个包中,并使用了父pom的发布版本。应用程序运行良好。然后,我将spring loaded添加到pom文件中,如doco中所述

我使用mvn spring boot:run运行应用程序

将我的控制器输出(例如“Hello World”更改为“Hello me”)不会进行热重新加载

我试着用其他地方描述的javaagent命令行参数作为java应用程序运行,但这也不起作用

pom如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.0.RELEASE</version>
</parent>

<!-- Additional lines to be added here... -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>1.2.1.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

4.0.0
com.example
我的项目
0.0.1-快照
org.springframework.boot
spring启动程序父级
1.2.0.1发布
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
springbootmaven插件
org.springframework
弹簧负载
1.2.1.发布

这里可以找到编译的类:project\u dir\target\classes(我正在使用Eclipse和m2e插件)

启动日志:

[INFO] Scanning for projects...
[INFO] 
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:1.2.0.RELEASE:run (default-cli) @ myproject >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myproject ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myproject ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\dev\src\scrapi\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ myproject ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\dev\src\scrapi\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ myproject ---
[INFO] No sources to compile
[INFO] 
[INFO] <<< spring-boot-maven-plugin:1.2.0.RELEASE:run (default-cli) @ myproject <<<
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.2.0.RELEASE:run (default-cli) @ myproject ---

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.0.RELEASE)

2015-01-02 13:23:25.311  INFO 2180 --- [.Example.main()] first.Example                            : Starting Example on DEFRAVD804016 with PID 2180 (C:\dev\src\scrapi\target\classes started by john in C:\dev\src\scrapi)
2015-01-02 13:23:25.359  INFO 2180 --- [.Example.main()] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@44354005: startup date [Fri Jan 02 13:23:25 CET 2015]; root of context hierarchy
2015-01-02 13:23:26.193  INFO 2180 --- [.Example.main()] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2015-01-02 13:23:27.121  INFO 2180 --- [.Example.main()] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8182/http
2015-01-02 13:23:27.689  INFO 2180 --- [.Example.main()] o.apache.catalina.core.StandardService   : Starting service Tomcat
2015-01-02 13:23:27.691  INFO 2180 --- [.Example.main()] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.15
2015-01-02 13:23:27.814  INFO 2180 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2015-01-02 13:23:27.814  INFO 2180 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2457 ms
2015-01-02 13:23:28.653  INFO 2180 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2015-01-02 13:23:28.657  INFO 2180 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2015-01-02 13:23:28.657  INFO 2180 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2015-01-02 13:23:28.883  INFO 2180 --- [.Example.main()] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@44354005: startup date [Fri Jan 02 13:23:25 CET 2015]; root of context hierarchy
2015-01-02 13:23:28.995  INFO 2180 --- [.Example.main()] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto java.lang.String first.Example.home()
2015-01-02 13:23:28.997  INFO 2180 --- [.Example.main()] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2015-01-02 13:23:28.998  INFO 2180 --- [.Example.main()] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
2015-01-02 13:23:29.112  INFO 2180 --- [.Example.main()] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-01-02 13:23:29.112  INFO 2180 --- [.Example.main()] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-01-02 13:23:29.160  INFO 2180 --- [.Example.main()] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-01-02 13:23:29.268  INFO 2180 --- [.Example.main()] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2015-01-02 13:23:29.394  INFO 2180 --- [.Example.main()] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8182/http
2015-01-02 13:23:29.399  INFO 2180 --- [.Example.main()] first.Example                            : Started Example in 4.417 seconds (JVM running for 11.803)
[INFO]正在扫描项目。。。
[信息]
[信息]使用线程计数为1的生成器org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder
[信息]
[信息]------------------------------------------------------------------------
[信息]正在构建myproject 0.0.1-SNAPSHOT
[信息]------------------------------------------------------------------------
[信息]
[信息]>>>spring boot maven插件:1.2.0.版本:run(默认cli)@myproject>>>
[信息]
[信息]---maven资源插件:2.6:resources(默认资源)@myproject---
[信息]使用“UTF-8”编码复制筛选的资源。
[信息]正在复制1个资源
[信息]正在复制0资源
[信息]
[信息]---maven编译器插件:3.1:compile(默认编译)@myproject---
[信息]检测到更改-重新编译模块!
[信息]正在将1个源文件编译为C:\dev\src\scrapi\target\classes
[信息]
[信息]---maven资源插件:2.6:testResources(默认testResources)@myproject---
[信息]使用“UTF-8”编码复制筛选的资源。
[信息]跳过不存在的资源目录C:\dev\src\scrapi\src\test\resources
[信息]
[信息]---maven编译器插件:3.1:testCompile(默认testCompile)@myproject---
[信息]没有要编译的源
[信息]

[信息]好的,我至少有一个我偶然发现的解决方法。希望这将有助于某人了解到底发生了什么。摘要:在pom中配置调试器时,它会工作

我想启用调试,因此我向pom中添加了以下内容,如下所述:

然后启动停止,应用程序将不会开始服务请求,直到附加调试器(这正常吗?编辑:重新阅读我链接到的页面,我发现这是正常的。如果有一种方法可以让启动继续进行,而不需要附加调试器,但保持调试端口打开,那将非常好)。连接调试器后,将显示Spring徽标和其他启动日志。然后我分离调试器(只是为了证明重新加载不是通过调试器),应用程序继续为请求提供服务,果然,热重新加载工作正常


非常感谢@DaveSyer帮助我们放弃了其他各种可能性。现在就可以了,虽然没有文档记录,但我想这不是设计的要求,如果它在所有情况下都能工作,那就太棒了。

尝试添加
弹簧加载的
作为
弹簧引导Maven
插件的依赖项:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>${spring-loaded.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

org.springframework.boot
springbootmaven插件
org.springframework
弹簧负载
${spring-loaded.version}

我用一个简单的
springcloud
应用程序运行了
Spring-Loaded

我从未用这种方式运行过Spring-Loaded。就我个人而言,我使用的是“老办法”,每次对我都有效。请尝试遵循以下步骤:

在eclipse中打开运行/调试配置

在左侧展开Java应用程序选项并选择您的运行配置<代码>应用程序
在我的例子中。设置错误的配置是常见的错误,因此请确保
project
main class
是正确的

编辑
VM参数
并将其设置为
-javaagent:-noverify
。如果您没有spring加载的localy,最简单的方法是repo并运行
/gradlew

包含一个gradle构建脚本,运行“./gradlew build”来重建代理-它将被创建为类似于:springloaded/build/libs/springloaded-1.1.5.build-SNAPSHOT.jar的内容

现在你可以启动你的新配置了。在浏览器中检查之前,请检查eclipse中的配置。右键单击java应用程序并选择属性

然后您应该看到您的应用程序正在使用javaagent运行


请让我们知道这是否适用于您。

请确保在更改类并将其复制到目标目录(通常是Eclipse的默认目录,但请检查项目设置中的“自动生成”)。@DaveSyer yes,“自动生成”启用,并且在保存时更新target/classes下的类上的时间戳。但是没有热重新加载。当应用程序启动时,您是否在日志中看到正在添加的代理?我假设控制器在更改之前工作?谢谢@DaveSyer的帮助。是的,控制器正在工作
[INFO] Attaching agents: [C:\dev\maven_local\org\springframework\springloade
d\1.2.1.RELEASE\springloaded-1.2.1.RELEASE.jar]
Listening for transport dt_socket at address: 5005
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>${spring-loaded.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>