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

camel:
  springboot:
    # The Camel context name
    name: CamelRestJpa
  rest:
    component: servlet
  component:
    servlet:
      mapping:
        contextPath: /camel-rest-jpa/*

mysql:
  service:
    # The host of the MySQL database server, can be customized using
    # the 'MYSQL_SERVICE_HOST' env variable
    host:     localhost
    # The port of the MySQL database server, can be customized using
    # the 'MYSQL_SERVICE_PORT' env variable
    port:     3306
    # The database to use, can be customized using the 'MYSQL_SERVICE_DATABASE'
    # env variable
    database: camelsampledb
    # The database username, can be customized using the 'MYSQL_SERVICE_USERNAME'
    # env variable
    username: cameluser
    # The database password, can be customized using the 'MYSQL_SERVICE_PASSWORD'
    # env variable
    password: cameluser

spring:
  # Spring JDBC configuration
  datasource:
    url:      jdbc:mysql://${mysql.service.host}:${mysql.service.port}/${mysql.service.database}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: ${mysql.service.username}
    password: ${mysql.service.password}
    initialization-mode: always

  # Spring Data JPA configuration
  jpa:
    database: mysql
    generate-ddl: false
    open-in-view: false
    hibernate:
      # To be updated in real production usage!
      ddl-auto: create-drop
    show-sql: true
    properties:
      hibernate:
        format_sql: true
        use_sql_comment: true
    database-platform: org.hibernate.dialect.MySQL8Dialect

# The application configuration properties
example:
  generateOrderPeriod: 10000
  processOrderPeriod: 30000