diff --git a/pom.xml b/pom.xml
index 10ee51c..3d3fe06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
ca.uhn.hapi.fhir
hapi-fhir
- 5.3.0
+ 5.4.0-PRE1-SNAPSHOT
hapi-fhir-jpaserver-starter
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
index 729b873..4d5edd1 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/AppProperties.java
@@ -67,6 +67,10 @@ public class AppProperties {
private Boolean lastn_enabled = false;
private NormalizedQuantitySearchLevel normalized_quantity_search_level = NormalizedQuantitySearchLevel.NORMALIZED_QUANTITY_SEARCH_NOT_SUPPORTED;
+ private Integer search_coord_core_pool_size = 20;
+ private Integer search_coord_max_pool_size = 100;
+ private Integer search_coord_queue_capacity = 200;
+
public Integer getDefer_indexing_for_codesystems_of_size() {
return defer_indexing_for_codesystems_of_size;
}
@@ -422,6 +426,23 @@ public class AppProperties {
this.normalized_quantity_search_level = normalized_quantity_search_level;
}
+ public Integer getSearch_coord_core_pool_size() { return search_coord_core_pool_size; }
+
+ public void setSearch_coord_core_pool_size(Integer search_coord_core_pool_size) {
+ this.search_coord_core_pool_size = search_coord_core_pool_size;
+ }
+
+ public Integer getSearch_coord_max_pool_size() { return search_coord_max_pool_size; }
+
+ public void setSearch_coord_max_pool_size(Integer search_coord_max_pool_size) {
+ this.search_coord_max_pool_size = search_coord_max_pool_size;
+ }
+
+ public Integer getSearch_coord_queue_capacity() { return search_coord_queue_capacity; }
+
+ public void setSearch_coord_queue_capacity(Integer search_coord_queue_capacity) {
+ this.search_coord_queue_capacity = search_coord_queue_capacity;
+ }
public static class Cors {
private Boolean allow_Credentials = true;
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java
index 5674d2a..6e26d41 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu2.java
@@ -13,6 +13,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -31,6 +32,19 @@ public class FhirServerConfigDstu2 extends BaseJavaConfigDstu2 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java
index 07406b2..a10ecb4 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigDstu3.java
@@ -11,6 +11,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -29,6 +30,20 @@ public class FhirServerConfigDstu3 extends BaseJavaConfigDstu3 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
@@ -68,7 +83,12 @@ public class FhirServerConfigDstu3 extends BaseJavaConfigDstu3 {
public ElasticsearchSvcImpl elasticsearchSvc() {
if (EnvironmentHelper.isElasticsearchEnabled(configurableEnvironment)) {
String elasticsearchUrl = EnvironmentHelper.getElasticsearchServerUrl(configurableEnvironment);
- String elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://")+3, elasticsearchUrl.lastIndexOf(":"));
+ String elasticsearchHost;
+ if (elasticsearchUrl.startsWith("http")) {
+ elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://") + 3, elasticsearchUrl.lastIndexOf(":"));
+ } else {
+ elasticsearchHost = elasticsearchUrl.substring(0, elasticsearchUrl.indexOf(":"));
+ }
String elasticsearchUsername = EnvironmentHelper.getElasticsearchServerUsername(configurableEnvironment);
String elasticsearchPassword = EnvironmentHelper.getElasticsearchServerPassword(configurableEnvironment);
int elasticsearchPort = Integer.parseInt(elasticsearchUrl.substring(elasticsearchUrl.lastIndexOf(":")+1));
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java
index 31c0dcc..a53b057 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR4.java
@@ -12,6 +12,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -31,6 +32,19 @@ public class FhirServerConfigR4 extends BaseJavaConfigR4 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
diff --git a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java
index 6e5bd98..2c6d72e 100644
--- a/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java
+++ b/src/main/java/ca/uhn/fhir/jpa/starter/FhirServerConfigR5.java
@@ -14,6 +14,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import javax.annotation.PostConstruct;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@@ -32,6 +33,19 @@ public class FhirServerConfigR5 extends BaseJavaConfigR5 {
@Autowired
AppProperties appProperties;
+ @PostConstruct
+ public void initSettings() {
+ if(appProperties.getSearch_coord_core_pool_size() != null) {
+ setSearchCoordCorePoolSize(appProperties.getSearch_coord_core_pool_size());
+ }
+ if(appProperties.getSearch_coord_max_pool_size() != null) {
+ setSearchCoordMaxPoolSize(appProperties.getSearch_coord_max_pool_size());
+ }
+ if(appProperties.getSearch_coord_queue_capacity() != null) {
+ setSearchCoordQueueCapacity(appProperties.getSearch_coord_queue_capacity());
+ }
+ }
+
@Override
public DatabaseBackedPagingProvider databaseBackedPagingProvider() {
DatabaseBackedPagingProvider pagingProvider = super.databaseBackedPagingProvider();
@@ -71,7 +85,12 @@ public class FhirServerConfigR5 extends BaseJavaConfigR5 {
public ElasticsearchSvcImpl elasticsearchSvc() {
if (EnvironmentHelper.isElasticsearchEnabled(configurableEnvironment)) {
String elasticsearchUrl = EnvironmentHelper.getElasticsearchServerUrl(configurableEnvironment);
- String elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://")+3, elasticsearchUrl.lastIndexOf(":"));
+ String elasticsearchHost;
+ if (elasticsearchUrl.startsWith("http")) {
+ elasticsearchHost = elasticsearchUrl.substring(elasticsearchUrl.indexOf("://") + 3, elasticsearchUrl.lastIndexOf(":"));
+ } else {
+ elasticsearchHost = elasticsearchUrl.substring(0, elasticsearchUrl.indexOf(":"));
+ }
String elasticsearchUsername = EnvironmentHelper.getElasticsearchServerUsername(configurableEnvironment);
String elasticsearchPassword = EnvironmentHelper.getElasticsearchServerPassword(configurableEnvironment);
int elasticsearchPort = Integer.parseInt(elasticsearchUrl.substring(elasticsearchUrl.lastIndexOf(":")+1));
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index a4d8734..3416404 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -6,6 +6,10 @@ spring:
password: null
driverClassName: org.h2.Driver
max-active: 15
+
+ # database connection pool size
+ hikari:
+ maximum-pool-size: 10
jpa:
properties:
hibernate.format_sql: false
@@ -83,6 +87,11 @@ hapi:
# allowed_origin:
# - '*'
+ # Search coordinator thread pool sizes
+ search-coord-core-pool-size: 20
+ search-coord-max-pool-size: 100
+ search-coord-queue-capacity: 200
+
# logger:
# error_format: 'ERROR - ${requestVerb} ${requestUrl}'
# format: >-