package ca.uhn.fhir.jpa.config; /* * #%L * HAPI FHIR JPA Server * %% * Copyright (C) 2014 - 2017 University Health Network * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowire; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler; import org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import ca.uhn.fhir.jpa.search.*; import ca.uhn.fhir.jpa.sp.ISearchParamPresenceSvc; import ca.uhn.fhir.jpa.sp.SearchParamPresenceSvcImpl; @Configuration @EnableScheduling @EnableJpaRepositories(basePackages = "ca.uhn.fhir.jpa.dao.data") public class BaseConfig implements SchedulingConfigurer { @Resource private ApplicationContext myAppCtx; @Autowired protected Environment myEnv; @Override public void configureTasks(ScheduledTaskRegistrar theTaskRegistrar) { theTaskRegistrar.setTaskScheduler(taskScheduler()); } @Bean(autowire = Autowire.BY_TYPE) public DatabaseBackedPagingProvider databaseBackedPagingProvider() { DatabaseBackedPagingProvider retVal = new DatabaseBackedPagingProvider(); return retVal; } @Bean() public ScheduledExecutorFactoryBean scheduledExecutorService() { ScheduledExecutorFactoryBean b = new ScheduledExecutorFactoryBean(); b.setPoolSize(5); return b; } @Bean(autowire=Autowire.BY_TYPE) public ISearchCoordinatorSvc searchCoordinatorSvc() { return new SearchCoordinatorSvcImpl(); } @Bean public ISearchParamPresenceSvc searchParamPresenceSvc() { return new SearchParamPresenceSvcImpl(); } @Bean(autowire=Autowire.BY_TYPE) public IStaleSearchDeletingSvc staleSearchDeletingSvc() { return new StaleSearchDeletingSvcImpl(); } @Bean public TaskScheduler taskScheduler() { ConcurrentTaskScheduler retVal = new ConcurrentTaskScheduler(); retVal.setConcurrentExecutor(scheduledExecutorService().getObject()); retVal.setScheduledExecutor(scheduledExecutorService().getObject()); return retVal; // ThreadPoolTaskScheduler retVal = new ThreadPoolTaskScheduler(); // retVal.setPoolSize(5); // return retVal; } // @PostConstruct // public void wireResourceDaos() { // Map<String, IDao> daoBeans = myAppCtx.getBeansOfType(IDao.class); // List bean = myAppCtx.getBean("myResourceProvidersDstu2", List.class); // for (IDao next : daoBeans.values()) { // next.setResourceDaos(bean); // } // } /** * This lets the "@Value" fields reference properties from the properties file */ @Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } }