# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
asyncConnectorFacadeExecutor.corePoolSize=5
asyncConnectorFacadeExecutor.maxPoolSize=25
asyncConnectorFacadeExecutor.queueCapacity=100

propagationTaskExecutorAsyncExecutor.corePoolSize=5
propagationTaskExecutorAsyncExecutor.maxPoolSize=25
propagationTaskExecutorAsyncExecutor.queueCapacity=100
propagationTaskExecutor=org.apache.syncope.core.provisioning.java.propagation.PriorityPropagationTaskExecutor

userProvisioningManager=org.apache.syncope.core.provisioning.java.DefaultUserProvisioningManager
groupProvisioningManager=org.apache.syncope.core.provisioning.java.DefaultGroupProvisioningManager
anyObjectProvisioningManager=org.apache.syncope.core.provisioning.java.DefaultAnyObjectProvisioningManager
virAttrCache=org.apache.syncope.core.provisioning.java.cache.CaffeineVirAttrCache
virAttrCacheSpec=maximumSize=5000,expireAfterAccess=1m
notificationManager=org.apache.syncope.core.provisioning.java.notification.DefaultNotificationManager
auditManager=org.apache.syncope.core.provisioning.java.DefaultAuditManager

quartz.jobstore=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
quartz.sql=tables_h2.sql
quartz.scheduler.idleWaitTime=5000
quartz.disableInstance=false
