我正在使用Spring的组件扫描在我的应用程序中查找bean。
<context:component-scan base-package="com.myapp"/>
然而,在我们的登台服务器(部署了大量应用程序的JBoss 5)上部署应用程序时的性能要比开发中慢得多(同样是JBoss 5,但应用程序很少)。组件扫描需要很长时间。我怀疑这是由于更大的类路径?
有没有一种简单的方法让Spring只在我的war文件中查找bean?即WEB-INF / classes和WEB-INF / lib?还是有另一种解决方案吗?
答案 0 :(得分:3)
两个提示;
答案 1 :(得分:3)
我不知道你是否有一个解决方案,但是我和一个同事,我有一个潜在的解决方案。
完全披露我们在Snowdrop项目上为Red Hat工作,该项目为JBoss上的Spring应用程序提供支持。
潜在的解决方案是在snowdrop的jboss命名空间中使用组件扫描 - https://github.com/snowdrop/snowdrop/tree/CustomBeanScanner
使用它可以添加自定义组件扫描程序而不是<context:component-scan base-package="foo.bar"/>
,您可以使用:<jboss:component-scan base-package="foo.bar"/>
。
我们知道它有效,但我们不知道是否有人想要更改其应用程序以使用该功能。故意耦合是否值得提高速度?
代码在上面列出的分支上,供任何人尝试/使用。
感谢, 约书亚
答案 2 :(得分:2)
您应该将类路径扫描设置设置为您的包(例如“com.foo”)。但是 - 在分段与开发中,类路径中的类数量应该没有太大差别。它将是您的WAR加上服务器范围的类,它们应该大致相同。具体来说,您不会在类路径中拥有来自其他WAR的类。
我怀疑服务器过载了。您应该从该计算机获取一些统计信息:即CPU利用率是多少?是否有很多磁盘I / O?是分页/交换过度吗?还要检查JVM的内存利用率 - 也许它花了很多时间进行垃圾收集。
答案 3 :(得分:2)
如果您指定
,该怎么办?<context:component-scan base-package="com.myapp" resource-pattern="/WEB-INF/classes/**/*.class"/>
或这种方法的其他替代方案?
答案 4 :(得分:0)
您是否可以更加具体地使用基本包指令?