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

# to reconfigure the camel servlet context-path mapping to use /api/* instead of /camel/*
camel.servlet.mapping.context-path=/api/*

# rest can also be configured here instead in the CamelRouter class
# rest DSL configuration
#camel.rest.component=servlet
#camel.rest.binding-mode=json
#camel.rest.data-format-property[prettyPrint]=true
#camel.rest.enable-cors=true
#camel.rest.port=${server.port:8080}
#camel.rest.context-path=/api

# rest DSL api-doc configuration
#camel.rest.api-context-path=/api-doc
#camel.rest.api-property[api.title]=User API
#camel.rest.api-property[api.version]=1.0.0

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