-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. 我想知道是否有任何解决方法(使用 SpEL?)可以让我使用 AFS 命名空间从文件或系统属性加载端口属性。

4

2 回答 2

0

您可以尝试使用PropertyOverrideConfigurer.

问题是您需要知道<afs:server>标签定义的 bean 名称(可能是“服务器”)和定义的属性类型<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 回答