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