首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迁移到SpringBoot3.0和SpringIntegration6.0后打印的警告

迁移到SpringBoot3.0和SpringIntegration6.0后打印的警告
EN

Stack Overflow用户
提问于 2022-11-28 12:36:43
回答 3查看 407关注 0票数 0

将项目从SpringBootv2.7迁移到v3.0 (因此从SpringIntegrationv5.5迁移到v6.0)后,将输出以下警告:

代码语言:javascript
运行
复制
WARN 22084 --- [  restartedMain] ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: com.foobar.MyClassA
WARN 22084 --- [  restartedMain] ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: com.foobar.MyClassB
WARN 22084 --- [  restartedMain] ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: com.foobar.MyClassC
WARN 22084 --- [  restartedMain] ocalVariableTableParameterNameDiscoverer : Using deprecated '-debug' fallback for parameter name resolution. Compile the affected code with '-parameters' instead or avoid its introspection: com.foobar.MyClassD

MyClassA扩展了IntegrationFlowAdapter,并使用@Component进行注释。

代码语言:javascript
运行
复制
package com.foobar;

@Component
class MyClassA extends IntegrationFlowAdapter {
  // …
}

MyClassB@ConfigurationProperties注释

代码语言:javascript
运行
复制
package com.foobar;

@ConfigurationProperties("my-config")
class MyClassB {
  // …
}

MyClassC@Configuration注释

代码语言:javascript
运行
复制
package com.foobar;

@Configuration
class MyClassC {
  // …
}

这个特别的甚至没有扩展任何东西,也没有注释:

代码语言:javascript
运行
复制
package com.foobar;

class MyClassD {
  // …
}

我在Spring Boot弹簧集成迁移指南中没有看到任何相关信息。Spring迁移指南中有一个关于名称解析的部分,但是它与Gradle有关,我正在使用Maven。我甚至不知道这个名字决议是怎么回事。

我对类LocalVariableTableParameterNameDiscoverer感到困惑,我也不知道我应该做什么迁移任务。

EN

回答 3

Stack Overflow用户

发布于 2022-11-28 14:14:47

正如由@m-deinum指出在问题中所指出的,这个问题与Spring或Spring无关,而是与Spring本身有关。我需要将-parameters选项添加到javac中。

如果您正在使用Maven,那么在pom.xml中添加以下内容应该可以解决这个问题:

代码语言:javascript
运行
复制
<project>
  
  <!-- … -->

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.10.1</version>
          <configuration>
            <compilerArgs>
              <arg>-parameters</arg>
            </compilerArgs>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <!-- … -->

</project>
票数 1
EN

Stack Overflow用户

发布于 2022-11-28 14:15:22

这在某种程度上与无关,两者都不是Spring。这种变化发生在Spring本身:https://github.com/spring-projects/spring-framework/issues/29563中。

是的,Spring使用LocalVariableTableParameterNameDiscovererMessagePublishingInterceptor for @Publisher中将方法参数作为SpEL EvaluationContexthttps://docs.spring.io/spring-integration/docs/current/reference/html/message-publishing.html#message-publishing中的PublisherMetadataSource.ARGUMENT_MAP_VARIABLE_NAME变量。

另一个是@MessagingGateway,如果不为该注释提供name属性,则尝试解析@Header方法params中的标头名称:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#mapping-method-arguments

MessagingMethodInvokerHelper中存在类似的逻辑来解析POJO服务方法的头名:https://docs.spring.io/spring-integration/docs/current/reference/html/configuration.html#annotations

因此,我们需要从Spring配置中获得更多信息,以确定可能的位置,只需将name属性添加到方法param上的@Header注释中。

我还看到这个LocalVariableTableParameterNameDiscoverer6.0.1中被废弃了。请提出一个针对Spring的GH问题,因此我们将修复它以支持上述的StandardReflectionParameterNameDiscoverer

票数 1
EN

Stack Overflow用户

发布于 2022-12-04 13:12:22

这些警告告诉您,LocalVariableTableParameterNameDiscoverer类正在使用不推荐的方法进行参数名称解析。Spring使用这个类来发现代码中方法参数的名称。为了修复这些警告,您需要使用-parameters标志而不是-debug标志编译代码。

要对Maven执行此操作,需要将-parameters标志添加到maven-compiler-pluginpom.xml文件中的pom.xml属性中。下面是一个如何做到这一点的例子:

代码语言:javascript
运行
复制
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.0</version>
      <configuration>
        <compilerArgs>
          <arg>-parameters</arg>
        </compilerArgs>
      </configuration>
    </plugin>
  </plugins>
</build>

在进行此更改后,重新编译代码,并且警告将不再出现。

至于名称解析本身,这是Spring在代码中确定方法参数名称的过程。默认情况下,方法参数的名称不存储在编译后的Java代码中,因此,如果要在Spring配置中使用这些名称,则需要启用某种类型的名称解析。-parameters标志是这样做的一种方式,而-debug标志是另一种(被废弃的)方式。建议使用-parameters标志来实现这一点,因为它提供了更准确和更有效的名称解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74600681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档