Ich lese Mails mit Feder Mail eingehenden Kanaladapter einmal Nachricht gelesen wird ich bin einige db Operationen in Dienst Aktivator der entsprechenden Kanal durchgeführt wird. Meine Anforderung ist, wenn ein DB-Vorgang fehlschlägt, sollte der Adapter die gleiche Nachricht erneut lesen.Re Herunterladen von Nachricht, wenn der Frühling Integration Eingangskanaladapter
Mail-Konfiguration:
@Bean
public DirectChannel inputChannel() {
return new DirectChannel();
}
@Bean
public IntegrationFlow pop3MailFlow() {
String url = "[url]";
return IntegrationFlows
.from(Mail.pop3InboundAdapter(url)
.javaMailProperties(p -> p.put("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory")),e -> e.autoStartup(true)
.poller(Pollers.fixedDelay(2000).transactionSynchronizationFactory(transactionSynchronizationFactory())))
.channel(inputChannel())
.handle(inboundEmailProcessor(),"messageProcess")
.get();
}
@Bean
public InboundEmailProcessor inboundEmailProcessor() {
return new InboundEmailProcessor();
}
@Bean
public TransactionSynchronizationFactory transactionSynchronizationFactory() {
TransactionSynchronizationFactory synchronizationFactory = new DefaultTransactionSynchronizationFactory(expressionEvaluatingTransactionSynchronizationProcessor());
return synchronizationFactory;
}
@Bean
public ExpressionEvaluatingTransactionSynchronizationProcessor expressionEvaluatingTransactionSynchronizationProcessor() {
ExpressionEvaluatingTransactionSynchronizationProcessor processor = new ExpressionEvaluatingTransactionSynchronizationProcessor();
ExpressionParser parser = new SpelExpressionParser();
processor.setAfterRollbackExpression(parser.parseExpression("new com.muraai.ex.config.Exp().process(payload)"));
return processor;
}
public class InboundEmailProcessor {
@Autowired
AttachmentsRepository attachmentsRepository;
@Transactional(rollbackFor = Exception.class)
public void messageProcess() {
// some db operations
// if it fails the same message should be read again
}
}
dachte ich, das funktionieren würde, aber es funktioniert nicht. Gibt es eine Möglichkeit, meine Anforderung zu erfüllen
public class Exp {
public void process(MimeMessage message) throws MessagingException {
message.setFlag(Flags.Flag.SEEN, false);
}
}
danke. Ich habe meine Konfiguration in IMAP geändert, funktioniert aber immer noch nicht –