The ability to configure an application's properties externally provides a great deal of flexibility: you can use any combination of command-line options and configuration files to achieve the desired settings, all without having to modify your application. This page describes two ways of loading property settings from a file.
On this page:
The Ice run time automatically loads a configuration file during the creation of a property set, which is an instance of the Ice::Properties
interface. Every communicator has its own property set from which it derives its configuration. If an application does not supply a property set when it calls Ice::initialize
(or the equivalent in other language mappings), the Ice run time internally creates a property set for the new communicator.
Note however that Ice loads a configuration file automatically only when the application creates a property set using an argument vector. This occurs when the application passes an argument vector to create a property set explicitly, or when the application passes an argument vector to Ice::initialize
.
Both of the mechanisms described below can also retrieve property settings from additional sources.
ICE_CONFIG
Environment VariableIce automatically loads the contents of the configuration file named in the ICE_CONFIG
environment variable (assuming the prerequisites are met). For example:
{zcode} $ export ICE_CONFIG=/usr/local/filesystem/config $ ./server {zcode} |
This causes the server to read its property settings from the configuration file in /usr/local/filesystem/config
.
If you use the ICE_CONFIG
environment variable together with command-line options for other properties, the settings on the command line override the settings in the configuration file. For example:
{zcode} $ export ICE_CONFIG=/usr/local/filesystem/config $ ./server --Ice.MessageSizeMax=4096 {zcode} |
This sets the value of the Ice.MessageSizeMax
property to 4096
regardless of any setting of this property in /usr/local/filesystem/config
.
You can use multiple configuration files by specifying a list of configuration file names separated by commas. For example:
{zcode} $ export ICE_CONFIG=/usr/local/filesystem/config,./config $ ./server {zcode} |
This causes property settings to be retrieved from /usr/local/filesystem/config
, followed by any settings in the file config
in the current directory; settings in ./config
override settings /usr/local/filesystem/config
.
Ice.Config
PropertyThe Ice.Config
property has special meaning to the Ice run time: it determines the path name of a configuration file from which to read property settings. For example:
{zcode} $ ./server --Ice.Config=/usr/local/filesystem/config {zcode} |
This causes property settings to be read from the configuration file in /usr/local/filesystem/config
.
The --Ice.Config
command-line option overrides any setting of the ICE_CONFIG
environment variable, that is, if the ICE_CONFIG
environment variable is set and you also use the --Ice.Config
command-line option, the configuration file specified by the ICE_CONFIG
environment variable is ignored.
If you use the --Ice.Config
command-line option together with settings for other properties, the settings on the command line override the settings in the configuration file. For example:
{zcode} $ ./server --Ice.Config=/usr/local/filesystem/config --Ice.MessageSizeMax=4096 {zcode} |
This sets the value of the Ice.MessageSizeMax
property to 4096
regardless of any setting of this property in /usr/local/filesystem/config
. The placement of the --Ice.Config
option on the command line has no influence on this precedence. For example, the following command is equivalent to the preceding one:
{zcode} $ ./server --Ice.MessageSizeMax=4096 --Ice.Config=/usr/local/filesystem/config {zcode} |
Settings of the Ice.Config
property inside a configuration file are ignored, that is, you can set Ice.Config
only on the command line.
If you use the --Ice.Config
option more than once, only the last setting of the option is used and the preceding ones are ignored. For example:
{zcode} $ ./server --Ice.Config=file1 --Ice.Config=file2 {zcode} |
This is equivalent to using:
{zcode} $ ./server --Ice.Config=file2 {zcode} |
You can use multiple configuration files by specifying a list of configuration file names separated by commas. For example:
{zcode} $ ./server --Ice.Config=/usr/local/filesystem/config,./config {zcode} |
This causes property settings to be retrieved from /usr/local/filesystem/config
, followed by any settings in the file config
in the current directory; settings in ./config
override settings /usr/local/filesystem/config
.