1

我有一个运行良好的 springboot jar,直到我将newrelic-agentjar 添加到类路径中,现在我需要指定一个主类。这是有道理的,因为我现在在类路径中有几个带有静态 main args 方法的类。推荐的方法是将其添加到'spring-boot-maven-plugin'。所以我做了以下事情:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <mainClass>com.ebates.rclon.Application</mainClass>
  </configuration>
  <executions>
    <execution>
     <goals>
        <goal>repackage</goal>
     </goals>
    </execution>
  </executions>
</plugin>

这样做之后,我得到:

java.lang.IllegalStateException:找不到用于提供静态内容的默认 servlet。请明确设置“defaultServletName”属性。

  • 为什么要指定主类中断弹簧靴自动配置?
  • 之前的 defaultServletName 是如何配置的?
4

1 回答 1

1

我想经过一些研究和玩弄之后,我对此有了更好的理解。

  • 添加一个 mainClass 并不是问题所在。Spring自动配置与它无关,问题是由于类路径中有两个jar,引入了第二个main方法,spring boot在启动时不知道使用哪个。通过修复该问题还揭示了存在多个应用程序上下文。

  • 在 Spring MVC 中有一个默认的 servlet 上下文,如果没有找到其他上下文来提供静态内容,则使用该上下文。当您启用此功能时,通常您不会指定名称,但如果您的类路径中有多个候选上下文,您需要命名它。这是有关如何执行此操作的示例:

@Configuration public class MVCConfig extends WebMvcConfigurerAdapter
{

    @Override public void configureDefaultServletHandling(final 
                       DefaultServletHandlerConfigurer configurer)
    {
        configurer.enable("nameOfDefaultContextGoesHere");
    }

}
于 2017-01-24T20:26:28.990 回答