无法在春季配置休息(请不要使用springboot)

时间:2018-02-07 14:42:02

标签: spring rest

我很难在春天配置休息。 Springboot魔法配置有效,但我不是在问这个问题。我想我必须补充一下:

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
    </dependency>

使用@EnableWebMvc进行anotate配置并完成。在大多数“教程”中就是这样。但这不起作用。它失败了,缺少javax.servlet.ServletContext。我添加它(没有教程这样做),并且它在“没有servlet上下文集”上失败。

这里有什么问题?应用程序甚至无法启动。

行家:

<dependencyManagement>
    <dependencies>

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>4.3.14.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>



      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.10.0</version>
      </dependency>

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>2.10.0</version>
      </dependency>

    </dependencies>
  </dependencyManagement>

  <dependencies>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <!--<scope>provided</scope>-->
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.2</version>
        <configuration>
          <finalName>${finalName}-notShaded</finalName>
        </configuration>

      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <!-- Run shade goal on package phase -->
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <finalName>${finalName}</finalName>
              <transformers>
                <!-- add Main-Class to manifest file -->
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>Main</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>

主:

try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext()) {
            SimpleCommandLinePropertySource sclps = new SimpleCommandLinePropertySource(args);
            ctx.getEnvironment().getPropertySources().addFirst(sclps);
            ctx.register(Configuration.class);
            ctx.refresh();
            ctx.start();
        } catch (Exception e) {
            throw new SdpException("Error initializing spring", e);
        }

配置:

@org.springframework.context.annotation.Configuration
@ComponentScan(basePackages = {"..."})
@EnableWebMvc
public class Configuration {
}

1 个答案:

答案 0 :(得分:0)

如果您想手动在自包含的应用程序中创建Spring Web应用程序,您可以:

  • 使用嵌入式容器(Tomcat,Jetty)并手动初始化它(在main方法中。这将允许您将webapp可执行为jar)。
  • 创建一个实现WebApplicationInitializer的类,该类负责创建和初始化Spring上下文

在自定义WebApplicationinitializer类中,您必须明确说明您的配置类是什么,或扫描您选择查找所有@Configuration类的包。

我根据这个非常好的Githubarticle上进行了POC。我希望这会对你有所帮助。