今回は、POCOでのプロパティファイルの使い方を詳解します。
実は、「2. ロギングフレームワークの使い方」でプロパティファイルは既出なのですが、ロギングフレームワーク内でプロパティファイルの読み込みが行われているため、詳解したコードにはプロパティファイルの処理が含まれていませんでした。
MySQLの接続情報をプロパティファイルから読み込むサンプルコードは以下のようになります。
プロパティファイル:mysql.properties
1 2 3 4 5 |
host=localhost
port=3306
user=test
password=test
db=test |
実装ファイル:PropertySample.cpp
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) |