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

# to configure camel main
# here you can configure options on camel main (see MainConfigurationProperties class)
camel.main.name = MyHealthyCamel

# enable JMX which allows to also control health check
camel.main.jmx-enabled = true

# enable supervised route controller which will startup routes in safe manner
camel.main.route-controller-supervise-enabled = true
# attempt up till 10 times to start a route (and exhaust if still failing)
camel.main.route-controller-back-off-max-attempts = 10

# enable health check (is automatic enabled if discovered on classpath)
camel.main.health-check-enabled = true
camel.main.health-check-routes-enabled = true

# properties used in the route
myPeriod = 10s
