# ============LICENSE_START=======================================================
# Copyright (C) 2023-2024 Nordix Foundation.
# ================================================================================
# Licensed 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.
#
#  SPDX-License-Identifier: Apache-2.0
#  ============LICENSE_END=========================================================

spring:
  jpa:
    ddl-auto: create
    show-sql: false
    properties:
      hibernate.enable_lazy_load_no_trans: true
      hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
      hibernate.format_sql: true
      hibernate.show_sql: false
      # Please ensure these values match those used in cps-application/src/main/resources/application.yml
      hibernate.id.new_generator_mappings: true
      hibernate.jdbc.batch_size: 100

  datasource:
    url: ${DB_URL}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
    driverClassName: org.postgresql.Driver
    initialization-mode: always

  liquibase:
    change-log: classpath:liquibase/test-changelog.yaml
