将Spring(Boot?)添加到现有的RESTEasy JAX-RS应用程序

时间:2017-06-07 14:12:08

标签: spring maven tomcat spring-boot jax-rs

我有一个基于JAX-RS的现有Maven项目,使用RESTEasy。它很棒!它创建了一个WAR,我部署到在Ubuntu上运行的Tomcat。它干净并遵循最新标准。 POM很简单:

...
<packaging>war</packaging>
...
<dependencies>
...
  <dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0.1</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>3.1.0.Final</version>
  </dependency>
  <dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-servlet-initializer</artifactId>
    <version>3.1.0.Final</version>
  </dependency>
  <dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jackson2-provider</artifactId>
    <version>3.1.0.Final</version>
  </dependency>
...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.5.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.0.0</version>
    </plugin>
  </plugins>
...

我不需要任何web.xml,因为我使用的是最新的Java EE注释:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/")
public class MyRESTApplication extends Application {

  final FooResource fooResource = new FooResourceService();

...

  @Override
  public Set<Object> getSingletons() {
    return ImmutableSet.of(fooResource);
  }
}

这很简单,而且工作得非常好!现在我只想要一种基于配置文件轻松更改FooResource实现的方法 - 换句话说,连接我的单例。春天进来的地方,对吧?而且我被告知Spring Boot让Spring变得更加精彩,你可以将它与任何东西一起使用,它会为你提供一个执行器,让你可以实时了解系统的健康状况。

不幸的是,所有Spring Boot书籍和教程似乎都认为我是从他们的一个快速启动应用程序开始的。但我已经拥有了一个非常简单的应用程序。我只想:

  • 通过Spring从外部配置文件(而不是注释)获取基于配置文件的应用程序连接。
  • 从Spring Boot获得其他任何好处,因为它显然很棒并且会彻底改变我的应用程序。

如何将Spring(或Spring Boot)添加到这个简单的小JAX-RS应用程序中?

1 个答案:

答案 0 :(得分:0)

我们解决了这个问题,我们创建了一个单例spring bean,让我们称之为ServiceStartupClass,我们在那里注册所有JAX-RS服务。

这里有一些代码片段,我们如何开始我们的服务:

import javax.ws.rs.ApplicationPath;

import org.glassfish.jersey.server.ResourceConfig;

@Component
@ApplicationPath("/")
public class ServiceStartupClass extends ResourceConfig {

    @PostConstruct
    public void startup() {
        register(FooResource.class);
        ...
    }
}

如果您需要任何进一步的帮助,请与我们联系