弹簧 MVC 3.2.8: Ftp入站文件同步器

2022-09-01 07:02:19

我有一个基于Spring Web模型 - 视图 - 控制器(Spring MVC 3.2.8)的应用程序,我想使用FTP SessionFactory的默认实现与FTP集成。

我有这段代码

private void performImport() throws Exception {

    String fileNamePattern="*.txt";

    ftpInboundFileSynchronizer = new FtpInboundFileSynchronizer(myFtpSessionFactory );
            ((FtpInboundFileSynchronizer) ftpInboundFileSynchronizer).setFilter(new FtpSimplePatternFileListFilter(fileNamePattern));

    ftpInboundFileSynchronizer.setRemoteDirectory(remoteDirectory);

    deleteLocalFiles();

    System.out.println ("before synchronize");

    ftpInboundFileSynchronizer.synchronizeToLocalDirectory(localDirectory);

    System.out.println ("after synchronize");
}

这是我在控制台中看到的:

before synchronize
after synchronize

在FTP中,我有一个文件,但文件未传输,我没有错误/异常test.txt

我也尝试过使用,但它也不起作用fileNamePattern="*.*";

这是我的配置文件:

@Configuration
@PropertySource("classpath:/config/application.properties")
public class FtpConfiguration {

    @Autowired
    private SessionFactory myFtpSessionFactory;

    @Bean
    @Scope(value="step")
    public FtpGetRemoteFilesTasklet myFtpGetRemoteFilesTasklet()
    {
        FtpGetRemoteFilesTasklet  ftpTasklet = new FtpGetRemoteFilesTasklet();
        ftpTasklet.setRetryIfNotFound(true);
        ftpTasklet.setDownloadFileAttempts(3);
        ftpTasklet.setRetryIntervalMilliseconds(10000);
        ftpTasklet.setFileNamePattern("README");
        //ftpTasklet.setFileNamePattern("TestFile");
        ftpTasklet.setRemoteDirectory("/");
        ftpTasklet.setLocalDirectory(new File(System.getProperty("java.io.tmpdir")));
        ftpTasklet.setSessionFactory(myFtpSessionFactory);

        return ftpTasklet;
    }

    @Bean   
    public SessionFactory myFtpSessionFactory()
    {
        DefaultFtpSessionFactory ftpSessionFactory = new DefaultFtpSessionFactory();
        ftpSessionFactory.setHost("myhost.com");
        ftpSessionFactory.setClientMode(0);
        ftpSessionFactory.setFileType(FTP.ASCII_FILE_TYPE);
        ftpSessionFactory.setPort(1029);
        ftpSessionFactory.setUsername("some_username");
        ftpSessionFactory.setPassword("really-private-password");

        return ftpSessionFactory;
    }
}

并且服务器日志文件中没有与 FTP 相关的任何内容

(self-tuning)'> <<WLS Kernel>> <> <> <1500554849537> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/template/LHheader.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <HTTP> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849554> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/template/popupHeader.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <HTTP> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849575> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/template/PopupTemplate.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <HTTP> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849596> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/template/Template.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <HTTP> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849612> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/welcome/defaultMenuBody.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <HTTP> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849626> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/welcome/logoutBody.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <HTTP> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849643> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/welcome/welcome.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <HTTP> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849663> <BEA-101341> <ecolabelEar: Class file up-to-date for JSP: /WEB-INF/jsp/welcome/welcomeBody.jsp> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <Deployer> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849839> <BEA-149060> <Module devices of application ecolabelEar successfully transitioned from STATE_NEW to STATE_PREPARED on server myserver.> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <WebLogicServer> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849861> <BEA-000256> <Invoking weblogic.transaction.internal.StartupClass.main(null)> 
    ####<20-Jul-2017 14:47:29 o'clock CEST> <Info> <Deployer> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554849872> <BEA-149059> <Module devices of application ecolabelEar is transitioning from STATE_PREPARED to STATE_ADMIN on server myserver.> 
    ####<20-Jul-2017 14:47:30 o'clock CEST> <Info> <org.hibernate.validator.engine.resolver.DefaultTraversableResolver> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554850444> <BEA-000000> <Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.> 
    ####<20-Jul-2017 14:47:30 o'clock CEST> <Info> <Deployer> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554850447> <BEA-149060> <Module devices of application ecolabelEar successfully transitioned from STATE_PREPARED to STATE_ADMIN on server myserver.> 
    ####<20-Jul-2017 14:47:30 o'clock CEST> <Info> <ServletContext-/devices> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1500554850652> <BEA-000000> <Initializing Spring root WebApplicationContext> 
    ####<20-Jul-2017 14:47:40 o'clock CEST> <Info> <org.hibernate.validator.engine.resolver.DefaultTraversableResolver> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1500554860329> <BEA-000000> <Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.> 
    ####<20-Jul-2017 14:47:40 o'clock CEST> <Info> <ServletContext-/devices> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1500554860918> <BEA-000000> <Initializing log4j from [classpath:com/devices//log4j.properties]> 
    ####<20-Jul-2017 14:47:41 o'clock CEST> <Debug> <SecurityAtn> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554861044> <BEA-000000> <EcasServletAuthenticationFilter@11e13f4 : init weblogic.security.service.internal.ServletAuthenticationFilterServiceImpl$FilterConfigImpl@ec4bb2 for context: ServletContext@13293236[app:ecolabelEar module:devices path:/devices spec-version:3.0]> 
    ####<20-Jul-2017 14:47:41 o'clock CEST> <Debug> <SecurityAtn> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554861496> <BEA-000000> <Registered JASPIC AuthConfigProvider for application.> 
    ####<20-Jul-2017 14:47:41 o'clock CEST> <Info> <ServletContext-/devices> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1500554861542> <BEA-000000> <Initializing Spring FrameworkServlet 'ecolabelWeb'> 
    ####<20-Jul-2017 14:47:42 o'clock CEST> <Info> <org.hibernate.validator.engine.resolver.DefaultTraversableResolver> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <> <> <1500554862961> <BEA-000000> <Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Diagnostics> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866282> <BEA-320000> <The Diagnostics subsystem is initializing on Server myserver.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Log Management> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866314> <BEA-170025> <Initialized Domain Logging. Domain log events will be written to C:\Development\Domains\devices\servers\myserver\logs/mydomain.log.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <Log Management> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866315> <BEA-170027> <The server has successfully established a connection with the Domain level Diagnostic Service.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Diagnostics> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866401> <BEA-320077> <Initialized the Diagnostic Accessor Service.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Log Management> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866436> <BEA-170031> <The default Server Logging bridge has been initialized successfully.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <WebLogicServer> <D02DI1350859ENV> <myserver> <main> <<WLS Kernel>> <> <> <1500554866456> <BEA-000365> <Server state changed to ADMIN.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <WebLogicServer> <D02DI1350859ENV> <myserver> <main> <<WLS Kernel>> <> <> <1500554866537> <BEA-000365> <Server state changed to RESUMING.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Deployer> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866541> <BEA-149059> <Module devices of application ecolabelEar is transitioning from STATE_ADMIN to STATE_ACTIVE on server myserver.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Deployer> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866542> <BEA-149060> <Module devices of application ecolabelEar successfully transitioned from STATE_ADMIN to STATE_ACTIVE on server myserver.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Management> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866549> <BEA-141052> <The auto deployment poller has started.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Info> <Server> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866563> <BEA-002610> <Dynamic Listener Service initialized.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <Server> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866564> <BEA-002613> <Channel "Default" is now listening on 158.166.167.112:7001 for protocols iiop, t3, ldap, snmp, http.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Warning> <Server> <D02DI1350859ENV> <myserver> <DynamicListenThread[Default]> <<WLS Kernel>> <> <> <1500554866564> <BEA-002611> <The hostname "D02DI1350859ENV.net8.pep.ant", maps to multiple IP addresses: 158.166.167.112, 0:0:0:0:0:0:0:1.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <Server> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866564> <BEA-002613> <Channel "Default[1]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <Server> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866565> <BEA-002613> <Channel "Default[2]" is now listening on 0:0:0:0:0:0:0:1:7001 for protocols iiop, t3, ldap, snmp, http.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <WebLogicServer> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866565> <BEA-000331> <Started the WebLogic Server Administration Server "myserver" for domain "mydomain" running in development mode.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <WebLogicServer> <D02DI1350859ENV> <myserver> <main> <<WLS Kernel>> <> <> <1500554866595> <BEA-000365> <Server state changed to RUNNING.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Notice> <WebLogicServer> <D02DI1350859ENV> <myserver> <main> <<WLS Kernel>> <> <> <1500554866596> <BEA-000360> <The server started in RUNNING mode.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Debug> <SecurityAtn> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866645> <BEA-000000> <Beginning getServletAuthenticationFilters.> 
    ####<20-Jul-2017 14:47:46 o'clock CEST> <Debug> <SecurityAtn> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554866645> <BEA-000000> <PrincipalAuthenticator.getServletAuthenticationFilters will use WLS-specific security service>  
        ####<20-Jul-2017 14:47:48 o'clock CEST> <Info> <EJB> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554868336> <BEA-010009> <EJB deployed EJB with JNDI name ejb.mgmt.MEJB.> 
        ####<20-Jul-2017 14:47:48 o'clock CEST> <Info> <EJB> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554868337> <BEA-014022> <javax.management.j2ee.ManagementHome is bound with JNDI name java:module/Mejb!javax.management.j2ee.ManagementHome.> 
        ####<20-Jul-2017 14:47:48 o'clock CEST> <Info> <EJB> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554868337> <BEA-014022> <javax.management.j2ee.ManagementHome is bound with JNDI name java:global/mejb/Mejb!javax.management.j2ee.ManagementHome.> 
        ####<20-Jul-2017 14:47:48 o'clock CEST> <Info> <EJB> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554868337> <BEA-014022> <javax.management.j2ee.ManagementHome is bound with JNDI name java:app/mejb/Mejb!javax.management.j2ee.ManagementHome.> 
        ####<20-Jul-2017 14:47:48 o'clock CEST> <Info> <EJB> <D02DI1350859ENV> <myserver> <[ACTIVE] ExecuteThread: '3' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1500554868337> <BEA-014021> <The EJB Mejb(Application: mejb, EJBComponent: mejb.jar) has been successfully deployed. The following remote interfaces have been bound into JNDI with the specified JNDI names:> 
        ####<20-Jul-2017 14:48:46 o'clock CEST> <Info> <Health> <D02DI1350859ENV> <myserver> <weblogic.GCMonitor> <<anonymous>> <> <> <1500554926432> <BEA-310002> <50% of the total memory in the server is free.> 

这里是配置文件:

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd 
        ">

    <!-- Use annotations to inject stuff -->
    <context:annotation-config />
    <mvc:annotation-driven />

    <!-- Scan for controllers -->
    <context:component-scan base-package="com.no.en.tenim.ni.cinc.controller.image" />
    <context:component-scan base-package="com.no.en.tenim.ni.cinc.controller" />   
    <context:component-scan base-package="com.no.en.tenim.ni.cinc.audit" />
    <context:component-scan base-package="com.no.en.tenim.ni.cinc.domain.formBeans" />
    <context:component-scan base-package="com.no.en.tenim.ni.cinc.utils" />





    <bean id="resultDecider" class="com.no.en.tenim.ni.cinc.audit.DevicesResultDecider"/>
    <bean id="userLocator"   class="com.no.en.tenim.ni.cinc.audit.BaseContextUserLocator"/>

    <!-- automatically import all controller beans -->
    <import resource="classpath:com/nicinc/Devices/controller/**/*Controller.xml" />

    <!--  The multipartResolver specifies in what way a multi part request should be treated. This enables file upload capabilities. -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>

    <bean name="viewBasenames"
        factory-bean="classpathBasenamePatternresolver"
        factory-method="resolve">
        <constructor-arg>
            <list>
                <value>views.**</value>
            </list>
        </constructor-arg>
    </bean>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
        <property name="basenames" ref="viewBasenames" />
    </bean>

    <!-- Maps incoming URLs to classnames -->
    <bean name="controllerHandler" class="springext.web.servlet.mvc.support.ControllerClassNameHandlerMapping">        
        <property name="basePackage" value="com.no.en.tenim.ni.cinc.controller" />        
        <property name="interceptors">
            <list>
                <!-- Checks a specific request parameter if the locale is changed. -->
                <ref bean="localeChangeInterceptor" />
                <ref bean="sessionInterceptor"      />
            </list>
        </property>
    </bean>

    <!-- Action URL mappings to controllers. -->
    <bean id="handlerMapping"
        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
        <property name="interceptors">
            <list>
                <!-- Checks a specific request parameter if the locale is changed. -->
                <ref bean="localeChangeInterceptor"/>
                <ref bean="sessionInterceptor"/>
            </list>
        </property>
    </bean>

    <bean name="formController" abstract="true">
        <property name="bindOnNewForm" value="true" />
        <property name="sessionForm" value="true" />
        <property name="synchronizeOnSession" value="true" />
        <property name="propertyEditorRegistrar" ref="propertyEditorRegistrar" />
    </bean>

    <!-- Resolves view name to template & body -->
    <bean name="templateViewResolver" class="springext.web.servlet.mvc.support.TemplateViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="templateMap">
            <bean class="springext.web.servlet.mvc.support.TemplateMapFactory">
                <property name="templateDir" value="/WEB-INF/jsp/template/" />
                <property name="templateSuffix" value="Template.jsp" />
                <property name="bodySuffix" value="Body.jsp" />
            </bean>
        </property>
    </bean>

</beans>

和另一个

<?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:mvc="http://www.springframework.org/schema/mvc"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:jee="http://www.springframework.org/schema/jee"
        xmlns:security="http://www.springframework.org/schema/security"

        xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security-4.0.xsd">


        <!-- As of Spring Security 4.0, CSRF protection is enabled by default with XML configuration -->
        <security:global-method-security secured-annotations="enabled" />

        <security:http auto-config="true">
            <security:csrf/>     
            <security:intercept-url pattern="/**" access="permitAll"    />
        </security:http> 

        <security:authentication-manager/>          


        <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>


        <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
            <property name="customEditors">
                <map>
                    <entry key="java.util.List">
                        <bean class="com.no.en.tenim.ni.cinc.support.beans.ListPropertyEditor" />
                    </entry>
                </map>
            </property>             
        </bean>

        <bean id="sessionInterceptor" class="com.no.en.tenim.ni.cinc.support.context.SessionInterceptor" />

        <!-- The locale resolver determines the locale of a request. -->
        <!-- In this example a cookie is used to store the chosen language. -->
        <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
            <property name="defaultLocale" value="en_GB" />
            <!-- <property name="paramName" value="language" /> -->
        </bean>
        <!-- The locale change interceptor checks a specific request parameter if the locale is changed. -->
        <!-- In this example the request parameter called 'locale' is checked. -->
        <bean id="localeChangeInterceptor"
                class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
        <bean name="classpathBasenamePatternresolver"
                class="com.no.en.tenim.ni.cinc.support.resource.ClassPathBaseNamePatternResolver">
        </bean>

        <bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
            <property name="locations">
                <list><value>classpath:config/application.properties</value></list>
            </property> 
        </bean>

        <!-- used for internationalized messages, e.g.: validation errors or instant help text. -->
        <bean id="messageSource" class="com.no.en.tenim.ni.cinc.support.context.EnglishMessageSource">
                <property name="dao">
                        <ref bean="databaseMessageSourceDao" />
                </property>
                <property name="defaultLanguage">
                        <value>en</value>
                </property>
                <property name="useCache">
                        <value>false</value>
                </property>             
        </bean>

        <bean name="dateFormat" class="java.text.SimpleDateFormat">
                <constructor-arg value="dd/MM/yyyy" />
        </bean>
        <bean name="customDateEditor" class="org.springframework.beans.propertyeditors.CustomDateEditor">
                <constructor-arg ref="dateFormat" />
                <constructor-arg value="true" />
        </bean>
        <bean name="CustomDictionaryEditor"
                class="com.no.en.tenim.ni.cinc.support.controller.CustomDictionaryEditor">
        </bean>
        <bean id="propertyEditorRegistrar"
                class="com.no.en.tenim.ni.cinc.support.controller.CustomPropertyEditorRegistrar">
                <property name="editors">
                        <map>
                                <entry key="java.util.Date" value-ref="customDateEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.ProductGroup"    value-ref="CustomDictionaryEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.ServiceGroup"    value-ref="CustomDictionaryEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.CompetentBody" value-ref="CustomDictionaryEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.Country"     value-ref="countryReferencePropertyEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.ApplicationSignatory"
                                        value-ref="CustomDictionaryEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.Description"
                                        value-ref="descriptionReferencePropertyEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.Language"
                                        value-ref="languageReferencePropertyEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.ServiceRating"
                                        value-ref="serviceRatingReferencePropertyEditor" />
                                <entry key="com.no.en.tenim.ni.cinc.domain.AccomodationType"
                                        value-ref="accomodationTypeReferencePropertyEditor" />
                        </map>
                </property>
        </bean>

        <bean id="exceptionResolver"
                class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
                <property name="exceptionMappings">
                        <value>
                                com.no.en.tenim.ni.cinc.domain.security.SessionExpiredException=noSessionView
                                com.no.en.tenim.ni.cinc.domain.security.NoSufficientRoleException=noRoleView
                                com.no.en.tenim.ni.cinc.domain.security.NoAccessException=noRoleView
                                com.no.en.tenim.ni.cinc.domain.security.NoUserException=noUserView

                        </value>
                </property>
        </bean>
        <bean id="sessionHelper" class="com.no.en.tenim.ni.cinc.controller.util.SessionHelper">
        </bean>

        <bean id="userMessagesManager" class="com.no.en.tenim.ni.cinc.support.controller.UserMessagesManager" scope="session">
            <aop:scoped-proxy/>
        </bean>
</beans>

答案 1

嘿,只需尝试此FTP连接的配置设置。希望它能解决您的问题。

import java.util.List;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.channel.interceptor.WireTap;
import org.springframework.integration.file.remote.gateway.AbstractRemoteFileOutboundGateway.Option;
import org.springframework.integration.ftp.gateway.FtpOutboundGateway;
import org.springframework.integration.ftp.session.DefaultFtpSessionFactory;
import org.springframework.integration.handler.LoggingHandler;
import org.springframework.integration.handler.LoggingHandler.Level;
import org.springframework.messaging.MessageChannel;

@Configuration
public class FtpConfiguration {
    @ServiceActivator(inputChannel = "ftpLS")
    @Bean
    public FtpOutboundGateway getGW() {
        FtpOutboundGateway gateway = new FtpOutboundGateway(sf(), "ls", "payload");
        gateway.setOption(Option.NAME_ONLY);
        gateway.setOutputChannelName("results");
        return gateway;
    }

    @Bean
    public MessageChannel results() {
        DirectChannel channel = new DirectChannel();
        channel.addInterceptor(tap());
        return channel;
    }

    @Bean
    public WireTap tap() {
        return new WireTap("logging");
    }

    @ServiceActivator(inputChannel = "logging")
    @Bean
    public LoggingHandler logger() {
        LoggingHandler logger = new LoggingHandler(Level.INFO);
        logger.setLogExpressionString("'Files:' + payload");
        return logger;
    }

    @Bean
    public DefaultFtpSessionFactory sf() {
        DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
        sf.setHost("localhost");
        sf.setPort(2121);
        sf.setUsername("anonymous");
        sf.setPassword("");
        return sf;
    }

    @MessagingGateway(defaultRequestChannel = "ftpLS", defaultReplyChannel = "results")
    public interface Gate {

        List list(String directory);

    }
}

答案 2

使用以下方法,我希望它能为你工作。

import org.apache.commons.net.ftp.FTPClient;

public boolean uploadFile(String localFilePath, String remotePath, String ftpHost, int ftpPort, String ftpUser, String ftpPassword) {
    FTPClient ftpClient = new FTPClient();
    boolean uploaded = false;
    try {
        ftpClient.connect(ftpHost, ftpPort);
        boolean login = ftpClient.login(ftpUser, ftpPassword);
        ftpClient.enterLocalPassiveMode();
        if (login) {
            File firstLocalFile = new File(localFilePath);
            LOG.info("local file location: "+ firstLocalFile);
            LOG.info("ftp location: "+ remotePath);
            InputStream inputStream = new FileInputStream(firstLocalFile);
            uploaded = ftpClient.storeFile(remotePath, inputStream);
            inputStream.close();
        } else {  
            LOG.info("Connection fail...");
        }
    } catch (SocketException e) {  
        LOG.error(e);
    } catch (IOException e) {  
        LOG.error(e);
    } finally {
        try{
           if(ftpClient != null){
             ftpClient.logout();
             ftpClient.disconnect();
           }
        }catch(Exception e){
           LOG.error(e);
        }
    }

    if (uploaded) {
        LOG.info("File uploaded successfully !");
        return true;
    } else {  
        LOG.info("Error in uploading file !");
        return false;
    }
}

推荐