## ---------------------------------------------------------------------------
## 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
# however this can be turned off by setting the option to false, or change to logging
camel.main.startup-recorder = java-flight-recorder

# 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
