¿Es posible publicar el servicio de descanso de la camiseta según el perfil de la primavera? digamos como siguiente ejemplo, ¿cómo puedo publicar RegisterServices1 cuando uso profile1 ?
public class ApiGWRestApplicationConfig extends ResourceConfig { public ApiGWRestApplicationConfig() { register(RegisterServicesApiGWInterface.class); } } @Service @Profile("profile1") @Path(SystemConstants.REST_REGISTER) public class RegisterServices1 implements RegisterServicesApiGWInterface {}
@Service @Profile("profile2") @Path(SystemConstants.REST_REGISTER) public class RegisterServices2 implements RegisterServicesApiGWInterface{}web.xml
<servlet> <servlet-name>jersey-servlet-kagw</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.ttech.tims.imos.web.ApiGWRestApplicationConfig</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>Entonces, lo que puede hacer es obtener ApplicationContext y usar getBeansWithAnnotation(Path.class) . Esto le dará todas las instancias de recursos que forman parte del perfil. Luego puede registrar las instancias.
Pensé que sería posible inyectar ApplicationContext en ResourceConfig , pero como se menciona en el comentario anterior, parece que la creación de ResourceConfig aún no tiene acceso a él.
Lo que pude ponerme a trabajar es usar una Feature JAX-RS que también tiene acceso a los métodos de registro, tal como lo tiene en ResourceConfig . El uso de la Feature le dará acceso a ApplicationContext
public class SpringProfilesFeature implements Feature { @Inject private ApplicationContext context; @Override public boolean configure(FeatureContext featureContext) { Map<String, Object> resources = context.getBeansWithAnnotation(Path.class); resources.values().forEach(resource -> featureContext.register(resource)); return true; } } Luego simplemente registre la función con ResourceConfig
public AppConfig() { register(SpringProfilesFeature.class); }Elimine cualquier otro registro que tenga para todos sus recursos. Simplemente deje que la función los registre.
He confirmado que esto funciona. No estoy seguro de cómo configura su perfil para el entorno, pero espero que esto sea algo que ya sepa cómo hacer.