Я пытаюсь превратить this example в приложение Spring Boot, проблема, лежащая в том, что RestfulServer
- это сервлет, и я действительно не пытаюсь сделать отдельное приложение, но один, который более или менее расширяет этот сервлет Проблема в том, что я сталкиваюсь с тем, что все, что я пробовал с WebApplicationInitializer
и SpringBootApplicationInitializer
, заключается в том, что они не инициализируют сервлет, а затем выполняют другие классы @Configuration
. Как я могу преобразовать класс JpaServerDemo
в Spring Boot? (Примечание: мы надеваем «т нужен 2-й сервлет)Как я могу установить приложение Spring Boot на внешний сервлет?
обновление это последняя вещь, которую я пытался, но я также пробовал различные итерации просто WebApplicationInitializer
или делать вещи в configure
метод, который кажется сложным, потому что он не имеет servletContext
и onStartup
не имеют ApplicationContext
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
RestfulServer server = new RestfulServer();
servletContext.addServlet("restful", server);
/*
* We want to support FHIR DSTU3 format. This means that the server
* will use the DSTU3 bundle format and other DSTU3 encoding changes.
*
* If you want to use DSTU1 instead, change the following line, and change the 3 occurrences of dstu2 in web.xml to dstu1
*/
server.setFhirContext(FhirContext.forDstu3());
WebApplicationContext myAppCtx = this.createRootApplicationContext(servletContext);
// Get the spring context from the web container (it's declared in web.xml)
/*
* The BaseJavaConfigDstu3.java class is a spring configuration
* file which is automatically generated as a part of hapi-fhir-jpaserver-base and
* contains bean definitions for a resource provider for each resource type
*/
List<IResourceProvider> beans = myAppCtx.getBean("myResourceProvidersDstu3", List.class);
server.setResourceProviders(beans);
/*
* The system provider implements non-resource-type methods, such as
* transaction, and global history.
*/
server.setPlainProviders(myAppCtx.getBean("mySystemProviderDstu3", JpaSystemProviderDstu3.class));
/*
* The conformance provider exports the supported resources, search parameters, etc for
* this server. The JPA version adds resource counts to the exported statement, so it
* is a nice addition.
*/
IFhirSystemDao<Bundle, Meta> systemDao = myAppCtx.getBean("mySystemDaoDstu3", IFhirSystemDao.class);
DaoConfig daoConfig = myAppCtx.getBean(DaoConfig.class);
JpaConformanceProviderDstu3 confProvider = new JpaConformanceProviderDstu3(server, systemDao, daoConfig);
confProvider.setImplementationDescription("Example Server");
server.setServerConformanceProvider(confProvider);
/*
* Enable ETag Support (this is already the default)
*/
server.setETagSupport(ETagSupportEnum.ENABLED);
/*
* This server tries to dynamically generate narratives
*/
FhirContext ctx = server.getFhirContext();
ctx.setNarrativeGenerator(new
DefaultThymeleafNarrativeGenerator());
/*
* Default to JSON and pretty printing
*/
server.setDefaultPrettyPrint(true);
server.setDefaultResponseEncoding(EncodingEnum.JSON);
/*
* -- New in HAPI FHIR 1.5 --
* This configures the server to page search results to and from
* the database, instead of only paging them to memory. This may mean
* a performance hit when performing searches that return lots of results,
* but makes the server much more scalable.
*/
server.setPagingProvider(myAppCtx.getBean(DatabaseBackedPagingProvider.class));
/*
* Load interceptors for the server from Spring (these are defined in FhirServerConfig.java)
*/
Collection<IServerInterceptor> interceptorBeans = myAppCtx.getBeansOfType(IServerInterceptor.class).values();
for (
IServerInterceptor interceptor : interceptorBeans)
{
server.registerInterceptor(interceptor);
}
/*
* If you are hosting this server at a specific DNS name, the server will try to
* figure out the FHIR base URL based on what the web container tells it, but
* this doesn't always work. If you are setting links in your search bundles that
* just refer to "localhost", you might want to use a server address strategy:
*/
//setServerAddressStrategy(new HardcodedServerAddressStrategy("http://example.com/fhir/baseDstu2"));
/*
* If you are using DSTU3+, you may want to add a terminology uploader, which allows
* uploading of external terminologies such as Snomed CT. Note that this uploader
* does not have any security attached (any anonymous user may use it by default)
* so it is a potential security vulnerability. Consider using an AuthorizationInterceptor
* with this feature.
*/
server.registerProvider(myAppCtx.getBean(TerminologyUploaderProviderDstu3.class));
}
@Override
protected SpringApplicationBuilder configure(final SpringApplicationBuilder builder) {
return builder;
}
public static void main(String[] args) {
configureApplication(new SpringApplicationBuilder()).run(args);
}
private static SpringApplicationBuilder configureApplication(final SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
вы можете добавить, как вы настроили WebApplicationInitializer – kuhajeyan
@kuhajeyan включал последнее, что я пытался, я пытался несколько вещей – xenoterracide