刚刚完成了Spring Boot + CometD + Spring Security 的整合, 真的是一个十分痛苦又绞尽脑汁的过程,国内外资料十分有限,而关于Spring Boot 和 CometD的整合,官方文档(https://docs.cometd.org/current4/reference/)推荐的是Spring Boot 2.0.X + CometD 4.0.X + Jetty. 这与我本身的项目差距甚远,我的项目是Spring Boot 1.5.19 + CometD 3.0.9 + Tomcat 8.5.37 + Spring Security 4.2.6. 在这一系列版本不改变的前提下,CometD works well.
在这过程中我用到了几个有帮助的网址:
(1)https://blog.youkuaiyun.com/wengdiquan/article/details/79361444
一位小伙伴写的tomcat 转 Spring Boot,有很大帮助。 奈何作者不在线,没办法请教交流。
(2)https://github.com/cometd/cometd/issues
这里是专业提问cometd相关问题的git地址,CometD的维护先生 sbordet 回复会很及时,感谢在我这段工作中 sbordet 先生提供的帮助。
(3)https://github.com/cometd/cometd/issues/865
这个是我的提问,最后面总结了我在这过程中遇到的一些问题,希望能对相关工作的小伙伴有所帮助。
下面附上一些关键代码:
Application.java
@SpringBootApplication
@ImportResource({ XML File......})
@ServletComponentScan
@ComponentScan
@EnableAutoConfiguration(exclude= {
DataSourceAutoConfiguration.class,
JmsAutoConfiguration.class,
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class,
MultipartAutoConfiguration.class,
SecurityAutoConfiguration.class,
SecurityAutoConfiguration.class,
FallbackWebSecurityAutoConfiguration.class,
OAuth2AutoConfiguration.class})
public class Application extends SpringBootServletInitializer implements ServletContextInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application .class);
}
@Override
public void onStartup(ServletContext servletContext) {
ServletRegistration.Dynamic cometdServlet = servletContext.addServlet("cometd", AnnotationCometDServlet.class);
cometdServlet.addMapping("/cometd/*");
cometdServlet.setAsyncSupported(true);
cometdServlet.setLoadOnStartup(1);
}
}
application.properties
额外需要加的,我这里有一些jsp和js. 另外js放在src/main/resources/static 下面
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.mvc.static-path-pattern=/**
pom.xml
Remove websocket ,去掉所有跟websocket相关的,我这里会报错,class not found 之类的错误
<dependency>
<groupId>org.cometd.java</groupId>
<artifactId>cometd-java-websocket-javax-server</artifactId>
<version>3.0.9</version>
</dependency>
Add 加入bayeux-api 这个jar包,这个jar包会自动包装在上面的wbesocket的包中,如果把websocket去掉就要单独引入这个包,这个是针对CometD 3.0.X, 在CometD 4.0.X 中取消了bayeux-api , CometD3 与 CometD4在某些方法和类上会有一些改动。
<dependency>
<groupId>org.cometd.java</groupId>
<artifactId>bayeux-api</artifactId>
</dependency>
因为我这里是多个Modules的工程,关于继承jar包以及jar包冲突遇到了很多很棘手的问题,这里提醒大家可以用mvn dependency : run的命令看jar包依赖关系。eclipse里pom.xml Dependencies 选项也能查看依赖关系。
在此过程中成长了很多,也收获了很多知识,希望这篇文章能对大家有所帮助。