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

####################################
# OFBiz Startup Application Settings
####################################

# --- OFBiz startup loaders (comma separated)
ofbiz.start.loaders=main

# --- OFBiz home directory. Default is current directory
#ofbiz.home=

# --- logs directory relative to ofbiz.home. Default is runtime/logs
#ofbiz.log.dir=

# --- Derby directory relative to ofbiz.home. Default is runtime/data/derby
#derby.system.home=

# --- Container config file relative to ofbiz.home.
#     Default is framework/base/config/ofbiz-containers.xml
#ofbiz.container.config=

# --- Network host, port and key used by the AdminClient to communicate
#     with AdminServer for shutting down OFBiz or inquiring on status
#     Default ofbiz.admin.host 127.0.0.1
#     Default ofbiz.admin.port 10523
#     Default ofbiz.admin.key so3du5kasd5dn
#ofbiz.admin.host=
#ofbiz.admin.port=
#ofbiz.admin.key=

# -- Enable the JVM shutdown hook. Default is true
#ofbiz.enable.hook=false

# -- Auto-Shutdown after load. Default is false
#ofbiz.auto.shutdown=true

# --- Tells AWT not not require a head (X11). Default is true
#java.awt.headless=false

# -- The locale for this OFBiz instance. Default depends on JVM environment
ofbiz.locale.default=en

# -- The time zone for this OFBiz instance. Default depends on JVM environment
#ofbiz.timeZone.default=GMT
