5. プロパティファイル

今回は、POCOでのプロパティファイルの使い方を詳解します。
実は、「2. ロギングフレームワークの使い方」でプロパティファイルは既出なのですが、ロギングフレームワーク内でプロパティファイルの読み込みが行われているため、詳解したコードにはプロパティファイルの処理が含まれていませんでした。
MySQLの接続情報をプロパティファイルから読み込むサンプルコードは以下のようになります。

プロパティファイル:mysql.properties

Shell
1
2
3
4
5
host=localhost
port=3306
user=test
password=test
db=test

実装ファイル:PropertySample.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "Poco/AutoPtr.h"
#include "Poco/FileStream.h"
#include "Poco/Util/PropertyFileConfiguration.h"
#include "Poco/Util/Application.h"
#include "Poco/Util/Option.h"
#include "Poco/Util/OptionSet.h"
#include "Poco/Util/HelpFormatter.h"
#include "Poco/Util/AbstractConfiguration.h"
#include <vector>
#include <iostream>
using Poco::AutoPtr;
using Poco::FileInputStream;
using Poco::Util::PropertyFileConfiguration;
using Poco::Util::Application;
using Poco::Util::Option;
using Poco::Util::OptionSet;
using Poco::Util::HelpFormatter;
using Poco::Util::AbstractConfiguration;
using Poco::Util::OptionCallback;
class PropertySample: public Application
    /// This sample demonstrates some of the features of the Poco::Util::PropertyFileConfiguration class.
{
public:
    PropertySample(): _helpRequested(false)
    {
    }
protected:
    void initialize(Application& self)
    {
        loadConfiguration(); // load default configuration files, if present
        Application::initialize(self);
        // add your own initialization code here
    }
    void uninitialize()
    {
        // add your own uninitialization code here
        Application::uninitialize();
    }
    void reinitialize(Application& self)
    {
        Application::reinitialize(self);
        // add your own reinitialization code here
    }
    void defineOptions(OptionSet& options)
    {
        Application::defineOptions(options);
        options.addOption(
            Option("help", "h", "display help information on command line arguments")
                .required(false)
                .repeatable(false)
                .callback(OptionCallback<PropertySample>(this, &PropertySample::handleHelp)));
    }
    void handleHelp(const std::string& name, const std::string& value)
    {
        _helpRequested = true;
        displayHelp();
        stopOptionsProcessing();
    }
    void handleConfig(const std::string& name, const std::string& value)
    {
        loadConfiguration(value);
    }
    void displayHelp()
    {
        HelpFormatter helpFormatter(options());
        helpFormatter.setCommand(commandName());
        helpFormatter.setUsage("OPTIONS");
        helpFormatter.setHeader("A PropertySample application that demonstrates how to use Poco::Util::PropertyFileConfiguration.");
        helpFormatter.format(std::cout);
    }
    int main(const std::vector<std::string>& args)
    {
        if (!_helpRequested)
        {
            // プロパティファイルを開きます。
            FileInputStream istr("./mysql.properties");
            AutoPtr<PropertyFileConfiguration> pConf = new PropertyFileConfiguration(istr);
            // プロパティを取得します。
            std::cout << "host:" << pConf->getString("host") << std::endl;
            std::cout << "port:" << pConf->getString("port") << std::endl;
            std::cout << "user:" << pConf->getString("user") << std::endl;
            std::cout << "password:" << pConf->getString("password") << std::endl;
            std::cout << "db:" << pConf->getString("db") << std::endl;
        }
        return Application::EXIT_OK;
    }
private:
    bool _helpRequested;
};
POCO_APP_MAIN(PropertySample)

Comments are closed.