Ho una vecchia applicazione web (servlet puro, senza Spring) che voglio eseguire come fat-jar. Questa app fornisce molti servizi REST. Non voglio modificare il vecchio codice.
Come configurare l'app Spring-Boot per continuare a utilizzare RestEasy?Come configurare l'app Spring-Boot per continuare a utilizzare RestEasy?
risposta
È possibile utilizzare il dispositivo di avviamento a molla RESTEasy. Ecco come si fa:
Aggiunta POM dipendenza
Aggiungere la dipendenza Maven qui sotto al tuo file dell'applicazione pom Primavera di avvio.
<dependency>
<groupId>com.paypal.springboot</groupId>
<artifactId>resteasy-spring-boot-starter</artifactId>
<version>2.1.1-RELEASE</version>
<scope>runtime</scope>
</dependency>
Registrazione classi di applicazione JAX-RS
Basta definire la classe di applicazione JAX-RS (una sottoclasse di Application) come un chicco di primavera, e sarà registrato automaticamente. Vedi l'esempio qui sotto. Vedere la sezione metodi di registrazione dell'applicazione JAX-RS in How to use RESTEasy Spring Boot Starter per ulteriori informazioni.
package com.test;
import org.springframework.stereotype.Component;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@Component
@ApplicationPath("/sample-app/")
public class JaxrsApplication extends Application {
}
Registrazione risorse JAX-RS e fornitori
Basta definiscono come i fagioli di primavera, e saranno registrati automaticamente. Si noti che le risorse JAX-RS possono essere singleton o richieste scope, mentre i provider JAX-RS devono essere singleton.
Non è stato così difficile. Ho semplicemente riscritto la configurazione dal mio vecchio web.xml usando le annotazioni Spring.
package kjkrol;
import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ServletContextInitializer;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import javax.servlet.ServletContextListener;
@ComponentScan
@EnableAutoConfiguration
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ServletContextInitializer initializer() {
return servletContext -> {
// RestEasy configuration
servletContext.setInitParameter("resteasy.scan", "true");
servletContext.setInitParameter("resteasy.servlet.mapping.prefix", "/services");
};
}
@Bean
public ServletContextListener restEasyBootstrap() {
return new ResteasyBootstrap();
}
@Bean
public ServletRegistrationBean restEasyServlet() {
final ServletRegistrationBean registrationBean = new ServletRegistrationBean();
registrationBean.setServlet(new HttpServletDispatcher());
registrationBean.setName("restEasy-servlet");
registrationBean.addUrlMappings("/services/*");
registrationBean.addInitParameter("javax.ws.rs.Application", "kjkrol.MyRESTApplication");
return registrationBean;
}
}
package kjkrol;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
public class MyRESTApplication extends Application {
private final Set<Object> singletons = new HashSet<Object>();
public MyRESTApplication() {
this.init();
}
protected void init() {
//TODO: Register your Rest services here:
// this.singletons.add(YourService.class);
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
La tua vecchia app di primavera utilizza la molla configurata tramite xml? Puoi provare a creare una classe Configuration che importa la tua configurazione xml. @Configuration @ImportResource ({"application-context.xml"}) classe pubblica Config {} –
Domanda correlata: [Integrazione spring-boot con RESTEasy] (http://stackoverflow.com/questions/36730237/integrating-spring -boot-con-RESTEasy). –