我使用以下spring配置将文件从本地文件夹传输到远程SFTP服务器。
<?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:int="http://www.springframework.org/schema/integration"
xmlns:sftp="http://www.springframework.org/schema/integration/sftp"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/sftp
http://www.springframework.org/schema/integration/sftp/spring-integration-sftp-2.2.xsd">
<bean id="sftpSessionFactory"
class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="xxxxxxx" />
<property name="knownHosts" value = "C:\knownhosts"/>
<property name="user" value="wildfly" />
<property name="password" value="w!ldfly" />
<property name="port" value="22" />
</bean>
<int:channel id="sftpChannel" />
<sftp:outbound-channel-adapter id="triggerFtpOutBound" channel="sftpChannel"
session-factory="sftpSessionFactory" remote-directory="/home/wildfly">
</sftp:outbound-channel-adapter>
我使用以下代码发送文件。
@Autowired
private MessageChannel sftpChannel;
Function()
{
File f = new File("c:/test.txt");
Message<File> message = MessageBuilder.withPayload(f).build();
sftpChannel.send(message);
}
我在sftpChannel.send(消息)处获得空指针异常。如何在我的代码中自动装配sftpChannel?
以下代码有效。但是,我想要autftire sftpChannel。
ApplicationContext context = new ClassPathXmlApplicationContext("spring/config/spring-sftp.xml");
MessageChannel sftpChannel = context.getBean("sftpChannel", MessageChannel.class);
File f = new File("c:/test.txt");
Message<File> message = MessageBuilder.withPayload(f).build();
sftpChannel.send(message);
答案 0 :(得分:1)
要使用自动装配,您需要包含
<context:annotation-config />
到您的配置文件
<beans
//...
xmlns:context="http://www.springframework.org/schema/context"
//...
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
//...
<context:annotation-config />
//...
</beans>
这里有一个完整的例子
http://www.mkyong.com/spring/spring-auto-wiring-beans-with-autowired-annotation/
答案 1 :(得分:0)
自动装配的工作方式与任何Spring应用程序相同;获取自动装配通道的bean必须在上下文中声明为bean。
您可以通过为org.springframework
启用DEBUG日志记录来始终调试Spring bean连接。
该框架在布线课程时提供了大量信息。
答案 2 :(得分:0)
我在您的代码中不确定,但看起来您将使用构造函数中的@Autowired
属性。
为此,您必须使用constructor injection
。
即使您的Function
是有效的Spring bean,从constructor
发送任何消息也是一个坏主意。
请修改你的设计并阅读更多关于Spring的书。