storm和springboot结合

springboot作为这几年流行的java框架,以其简易的开发风格,受到了很多人的关注。最近有个项目需要用到storm,就想着结合springboot进行开发。中间遇到几个问题,鉴于网上很多相关的博客都是复制粘贴的,远程提交拓扑会有问题,我这里简单列下我的做法:

问题1: storm的每个拓扑都需要一个程序执行的入口,而springboot只有一个入口,两者有冲突

解决方案:在springboot启动的main方法里,通过命令行传进的参数,取到不同的拓扑bean,启动响应的拓扑

 

问题2:storm远程提交的时候,spout和bolt里取不到spring管理的bean

解决方案:在spout的open方法、bolt的prepare方法里,手动取得bean。这里需要手动写个工具类,来获取到spring的上下文,同时需要避免上下文重复加载

如图,我这里使用的是双重检查的机制:

public class SpringContextUtil {

    private static ApplicationContext context;

    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.context = applicationContext;
    }

    public static ApplicationContext getContext(){
        if(context == null){
            synchronized (SpringContextUtil.class){
                if(context == null){
                    context = SpringApplication.run(Main.class);
                }
            }
        }
        return context;
    }
}

问题3:打包后,提交的拓扑无法执行

解决方案:编写gradle任务,将工程依赖的jar包传到storm/extlib目录里,执行gradle jar,打出来的jar包就可以正常提交运行了

转载于:https://www.cnblogs.com/yjcblog/p/9437661.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值