## ---------------------------------------------------------------------------
## 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 = MySlowCamel

# enable startup recorder which can be logging or java-flight-recorder
# will autodetect camel-jfr from classpath and enable java-flight-recorder
# however this can be turned off by setting the option to false, or change to logging
#camel.main.startup-recorder = false
#camel.main.startup-recorder = logging

# automatic start a JFR recording and dump it to disk after Camel is started
camel.main.startup-recorder-recording = true
# what JFR profile to use (default or profile) the profile controls what and how much data to capture and record
#camel.main.startup-recorder-profile = profile
# to keep recording for 60 seconds and will be auto-saved on timeout
# you can also use -1 to only record Camel startup and save the recording right after Camel has been started
# this can be used to solely focus on Camel startup performance bottlenecks
#camel.main.startup-recorder-duration = 60

# run in lightweight mode to be tiny as possible
camel.main.lightweight = true

# properties used in the route
myPeriod = 1000
