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

# the name of Camel
camel.springboot.name = SampleCamel

# to automatic shutdown the JVM after a period of time
#camel.springboot.duration-max-seconds=60
#camel.springboot.duration-max-messages=100

# add for example: &repeatCount=5 to the timer endpoint to make Camel idle
#camel.springboot.duration-max-idle-seconds=15

# properties used in the Camel route and beans
# --------------------------------------------

# turn on actuator health check
management.endpoint.health.enabled = true

# configure connection to the rabbit mq broker using camel-rabbitmq style
# note you can also configure from Java code, see SampleCamelApplication.java
camel.component.rabbitmq.hostname=localhost
camel.component.rabbitmq.port-number=5672
camel.component.rabbitmq.username=guest
camel.component.rabbitmq.password=guest

# to configure logging levels
#logging.level.org.springframework = INFO
#logging.level.org.apache.camel.spring.boot = INFO
#logging.level.org.apache.camel.impl = DEBUG
#logging.level.sample.camel = DEBUG
