我有一个带有嵌入式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命名空间和从文件或系统属性加载port属性。
答案 0 :(得分: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();
答案 1 :(得分: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>