groovy スクリプトで Apache Commons Configuration を使用して、単純なプロパティ ファイルから値を読み取り、そのファイルからこれらの値を XML テンプレートに入力しようとしています。この例の目標は、プロパティ ファイルで定義された設定を使用して、Tomcat の複数のインスタンスを起動できるようにすることです。Apache Commons 構成フレームワークの怪物にもかかわらず、さまざまな構成タイプをすぐに読み取り/書き込み/検証できるため、選択されました。
テンプレートは、Tomcat の server.xml の一部です。
<?xml version='1.0' encoding='utf-8'?>
<Server port="${tomcat.server.port}" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="${tomcat.http.port}"
address="${tomcat.http.ip}"/>
<Engine jvmRoute="${tomcat.jvmroute}"/>
</Service>
</Server>
プロパティファイル (tomcat.properties としましょう):
application=someapp
tomcat.server.port=8087
tomcat.http.port=8088
tomcat.jvmroute=${application}
DefaultConfigurationBuilder を使用して、これらのファイルを構成に結合します。定義ファイルが動的に作成されています。コード:
import groovy.xml.MarkupBuilder
import org.apache.commons.configuration.*
String configurationDefinition = "tomcat.configuration.xml"
File configurationDefinitionFile = new File(configurationDefinition)
FileWriter configurationDefinitionWriter = new FileWriter(configurationDefinitionFile)
MarkupBuilder fileList = new MarkupBuilder(configurationDefinitionWriter)
fileList.configuration() {
properties(fileName:'tomcat.properties')
xml(fileName:'server.xml')
}
configurationDefinitionWriter.close()
DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
builder.setFile(configurationDefinitionFile);
Configuration propertiesConfig = builder.getConfiguration(true);
//propertiesConfig.getKeys().each { propertyName ->
// println("$propertyName = ${propertiesConfig.getString(propertyName)}")
//}
XMLConfiguration conf = (XMLConfiguration)propertiesConfig.getConfiguration(1)
//conf.getKeys().each { propertyName ->
// println("$propertyName = ${conf.getString(propertyName)}")
//}
conf.save("server_parsed.xml")
保存されたファイルは、上記の server.xml と同じです。例 port="${tomcat.server.port}" プロパティファイルの値で保存する方法はありますか?