加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程 – 如何使用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实例,设置其成员属性,然后将其提交给执行程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读