## ---------------------------------------------------------------------------
## 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.
## ---------------------------------------------------------------------------

debug = false

logging.level.org.springframework = INFO
logging.level.org.apache.camel.spring.boot = INFO
logging.level.org.apache.camel.health = DEBUG
logging.level.org.apache.camel.impl.health = DEBUG
logging.level.sample.camel = DEBUG

# enable the shutdown endpoint
management.endpoint.shutdown.enabled=true

# expose actuator endpoint via HTTP
management.endpoints.web.exposure.include=mappings,metrics,shutdown

camel.springboot.name = MyCamel

# properties used in the route
metricsPeriod = 2s
shutdownTime = 10s

# enable supervised route controller which will startup routes in safe manner
camel.springboot.route-controller-supervise-enabled = true
