2

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}" プロパティファイルの値で保存する方法はありますか?

4

1 に答える 1