多线程 – 如何使用Spring Framework调用Runnable?
发布时间:2020-12-15 08:44:51 所属栏目:Java 来源:网络整理
导读:我有一个需要调用runnable类的服务. 以下是我的服务中使用的代码行. @Autowiredprivate LinkBrc2MemberProfile brcTask; // Background Task.SimpleAsyncTaskExecutor sate = new SimpleAsyncTaskExecutor();sate.createThread(new LinkBrc2MemberProfile(us
我有一个需要调用runnable类的服务.
以下是我的服务中使用的代码行. @Autowired private LinkBrc2MemberProfile brcTask; // Background Task. SimpleAsyncTaskExecutor sate = new SimpleAsyncTaskExecutor(); sate.createThread(new LinkBrc2MemberProfile(user)); 这是我的Runnable类 @Service public class LinkBrc2MemberProfile implements Runnable { private final Logger log = LoggerFactory.getLogger(LinkBrc2MemberProfile.class); @Autowired private LoyaltyDao dao; private Member member; public LinkBrc2MemberProfile() { super(); } public LinkBrc2MemberProfile(Member member) { this.member = member; } public void run() { log.debug("*** Member User Name: " + member.getString("USER_NAME")); String emailAddress = member.getString("USER_NAME"); Map<String,Object> map = dao.findBrcByEmailAddress( emailAddress ); log.debug("=========================================================="); if( ! map.isEmpty() ) { try { //a.CUSTOMER_ID,a.EMAIL_ADDRESS,b.card_no String customerId = (String) map.get("CUSTOMER_ID"); String brcCardNumber = (String) map.get("CARD_NO"); log.debug("ncustomerId: " + customerId + " brcCardNumber: " + brcCardNumber); if(!brcCardNumber.equals("")) { // Add the Be Rewarded Card. HashMap<String,String> userAttributes = new HashMap<String,String>(); String brcNumber = member.getString("BREWARDED_CARD_NO"); if (brcNumber.equals("")) { userAttributes.put("BREWARDED_CARD_NO",brcCardNumber); try { member.putAll(userAttributes); } catch (Exception e) { String errorMessage = "Unable to save user's BRC information due to: " + e.getMessage(); log.error("{}",errorMessage); } } } } catch (Exception e) { log.error(e.getMessage()); e.printStackTrace(); } } } 我没有在日志中看到任何错误,但同时它似乎没有调用Runnable类.我在哪里错过了注释?有没有什么好的例子可以指出我,我发现只有使用XML文件来配置我想使用注释的runnable类.提前致谢. 我已更新我的服务以执行以下操作. 请帮助,我的DAO是NULL,所以看起来我的Runnable类中的@Autowired没有连接它. 我已将以下bean添加到我的bean-config.xml文件中. <bean id="brcType" class="com.ws.ocp.service.LinkBrc2MemberProfile" scope="prototype"/> 我删除了@Autowired注释并将以下内容添加到我的服务类中. ClassPathResource rsrc = new ClassPathResource("bean-config.xml"); XmlBeanFactory factory = new XmlBeanFactory(rsrc); LinkBrc2MemberProfile brcTask = (LinkBrc2MemberProfile) factory.getBean("brcType"); SimpleAsyncTaskExecutor sate = new SimpleAsyncTaskExecutor(); // Set Member attribute brcTask.setMember(user); // Executer sate.execute(brcTask); 为什么我的dao仍然是null? 解决方法
runnable会抛出一个NullPointerException,因为你自己创建它(使用new运算符),而不是让Spring创建它.这显然意味着自动装配的DAO属性不会自动装配,这将在调用dao.findBrcByEmailAddress(…)时导致NPE.
您应该从bean工厂(作为原型)获取Runnable实例,设置其成员属性,然后将其提交给执行程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |