Я новичок в интеграции Spring и Spring, и у меня есть простая задача. Фильтрация некоторых электронных писем по теме, хотя регулярное выражение и регистрация информации в db.Весенний интеграционный почтовый входящий канал
Я установил JavaMailProperties, и тест дает мне вывод прочитанных писем, но метод, который я устанавливаю с помощью service-activator
, никогда не вызывается, и это на самом деле заставляет меня сильную головную боль.
Ниже файл конфигурации XML:
<?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:mail="http://www.springframework.org/schema/integration/mail"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/integration/mail
http://www.springframework.org/schema/integration/mail/spring-integration-mail-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<util:properties id="javaMailProperties">
<prop key="mail.store.protocol">pop3</prop>
<prop key="mail.debug">true</prop>
</util:properties>
<mail:inbound-channel-adapter id="pop3Adapter"
store-uri="pop3://username:[email protected]:110/INBOX"
channel="recieveEmailChannel"
should-delete-messages="false"
auto-startup="true"
java-mail-properties="javaMailProperties"
mail-filter-expression="subject matches '(^Presente+\\s([1-9]{1})+(\\s[-]\\s)+([A-Z]{4,})+(\\s[A-Z]{6,})$)'">
<int:poller max-messages-per-poll="10" fixed-delay="10000"/>
</mail:inbound-channel-adapter>
<int:channel id="recieveEmailChannel">
<int:interceptors>
<int:wire-tap channel="logger"/>
</int:interceptors>
</int:channel>
<int:logging-channel-adapter id="logger" level="DEBUG"/>
<int:service-activator input-channel="recieveEmailChannel" ref="leggiMail" method="processa_mail"/>
<bean id="leggiMail" class="it.jenia.ac.mail.rapportini.LeggiMail">
</bean>
</beans>
LeggiMail
класс с методом processa_mail
очень прост:
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.stereotype.Service;
@Service
public class LeggiMail {
private static Logger logger = Logger.getLogger(LeggiMail.class);
public static int count_get = 0;
@ServiceActivator
public void processa_mail(MimeMessage mimeMessage) {
count_get++;
logger.debug("porcessa_mail working");
}
Тест класс я использую это приложение в:
@ContextConfiguration(locations = { "classpath*:/test-spring-configuration.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
public class LeggiMailTest {
private static Logger logger = Logger.getLogger(LeggiMailTest.class);
@Autowired
LeggiMail lm;
@Test
@Transactional(value = "transactionManager", propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = Exception.class)
public void test_processa_mail(){
logger.debug("Test started");
}
}
Журнал Test started
отображается правильно в консоль, но журнал porcessa_mail working
никогда не появляется.
Первый учебник, который я нашел на эту тему, просто рассказал о методе, который был бы вызван по умолчанию контекстом. http://blog.solidcraft.eu/2011/04/read-emails-from-imap-with-spring.html (И это говорит о том, что метод «processa_mail» должен называться по умолчанию, когда контекст загружен, потому что это service-activator
Читая этот учебник о службе активаторе не помогло достаточно:. http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html
И почему это должно быть названо. Приложение запускается и останавливается после этого, если я прав. Также мне интересно, почему вы загружаете 2 контекста и делаете это хуже, вы смешиваете 2 боба из разных контекстов ... На первый взгляд, я бы сказал, что ваш тест испорчен. –
В соответствии с этим (http://blog.solidcraft.eu/2011/04/read-emails-from-imap-with-spring.html) учебником метод следует вызывать по умолчанию. Я не совсем понимаю, почему, но, возможно, я могу попросить вас вызывать метод «после» чтения электронных писем? – softwareplay
Я просто не могу понять процедуру «между ними». – softwareplay