-1

Apache FTP サーバーが組み込まれたスタンドアロンの Spring アプリケーションがあります。構成は次のようになります-

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:afs="http://mina.apache.org/ftpserver/spring/v1"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd">    

    <context:property-placeholder location="classpath:config.properties" system-properties-mode="OVERRIDE"/>

    <afs:server id="server" anon-enabled="false">

        <afs:listeners>
            <afs:nio-listener name="default" port="2222"
                idle-timeout="60" />
        </afs:listeners>

        <!-- other AFS config -->

    </afs:server>
</beans>

プロパティファイルから のportプロパティを読み込みたいのですが、nio-listener

<afs:nio-listener name="default" port="${ftp.port}"
                    idle-timeout="60" />

portはxsd で として定義されているため、機能しませんxs:int。AFS 名前空間を使用して、ファイルまたはシステム プロパティからポート プロパティをロードできる回避策 (SpEL を使用) があるかどうかを知りたいです。

4

2 に答える 2

0

で試すことができPropertyOverrideConfigurerます。

<afs:server>問題は、タグが定義する Bean 名 ('server' の場合があります) と、<afs:listeners>定義するプロパティ タイプ (Bean 定義の管理リストの場合があります)を知る必要があることです。

STS Bean Explorer を見て正しい答えを見つけ、次のようなものを試してください

<context:property-override location="classpath:config.properties" />

server.listeners[0].port=2222

その他のオプションは、スキーマ検証設定を無効にして、xml アプリケーション コンテキストで更新する前に false に検証することです。

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                        new String[] {"applicationContext.xml"}, false);
        context.setValidating(false);
        context.refresh();
于 2013-04-04T08:42:59.170 に答える
0

いくつかのオプションを検討した結果、最も簡単な方法は afs 名前空間の外に出て、リスナーの構成のみを行うことであると判断しました。最終的な構成は次のようになります-

<bean id="listenerFactory" class="org.apache.ftpserver.listener.ListenerFactory">
    <property name="port" value="${ftp.port}" />
    <property name="dataConnectionConfiguration">
        <bean factory-bean="dataConnectionConfigurationFactory"
            factory-method="createDataConnectionConfiguration" />
    </property>
</bean>

<bean id="dataConnectionConfigurationFactory" class="org.apache.ftpserver.DataConnectionConfigurationFactory" />

<bean id="nioListener" factory-bean="listenerFactory" factory-method="createListener" />

<afs:server id="server" anon-enabled="false">

    <afs:listeners>
        <afs:listener name="default">
            <ref bean="nioListener"/>
        </afs:listener>
    </afs:listeners>

    <!-- other AFS config -->

</<afs:server>
于 2013-04-05T15:06:41.333 に答える