Tag: 弹簧

在multithreadingWeb应用程序中访问请求范围的bean

场景:我们有一个在Websphere中运行的Spring托管Web应用程序。 (Spring 3.0.x,WAS 7)webapp通过Spring的WorkManagerTaskExecutor (配置线程池大小为10)利用Websphere的工作管理器来执行计算密集型数据库读取操作。 所以基本上,一个请求来生成,比方说,生成10个不同的文档。 要生成文档,只需要db读取来收集/处理数据。 因此,我们基本上产生10个线程来处理10个文档,最后收集10个工作者返回的10个文档并合并它们并向客户端写回一个大响应。 我们确定的是,当10个线程正在收集/处理数据时,会产生大量类似的数据库调用。 因此,我们想出的是围绕最常执行的db方法创建一个Aspect来缓存响应。 方面配置为单例,方面使用的高速缓存自动assembly到方面,并将范围设置为请求范围,以便每个请求都有自己的高速缓存。 问题:现在这个方法的问题是,当线程正在进行数据库调用而Aspect是interjects时,我们得到了java.lang.IllegalStateException: No thread-bound request foundexception。 我理解的是完全有效的,因为线程正在请求上下文之外执行。 有没有办法绕过这个问题? 是否可以将带有请求范围缓存的方面应用于这些线程调用的方法?

Lifecycle界面如何在Spring中运行? 什么是“顶级单身豆”?

在Spring javadoc中说,“请注意,Lifecycle接口仅支持顶级单例bean。” 这里的URL 我的LifecycleBeanTest.xml描述了bean,如下所示: 所以看起来很“热”和“单调”。 这是什么意思? 如何让Spring知道我的bean实现Lifecycle并用它做点什么? 假设我的main方法在Spring中看起来如下 public static void main(String[] args) { new ClassPathXmlApplicationContext(“/tests/LifecycleBeanTest.xml”).close(); } 所以,它实例化上下文然后立即关闭它。 我可以在我的配置中创建一些bean,这延迟了close()执行,直到应用程序完成它的全部工作? 那么主方法线程等待应用程序终止? 例如,以下bean不按我想象的方式工作。 调用start()而不是stop() 。 package tests; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.Lifecycle; public class LifecycleBean implements Lifecycle { private static final Logger log = LoggerFactory.getLogger(LifecycleBean.class); private final Thread thread = new Thread(“Lifecycle”) { { setDaemon(false); setUncaughtExceptionHandler(new […]

Spring是否以线程安全的方式发布bean?

我对JVM内部的了解是,如果引用未正确发布,则不同的线程可能会看到相同字段的不同值。 我的问题是: Spring bean容器能保证安全发布吗? 如果没有,我应该使我的所有bean getter和setter synchronized还是使用volatile ? 或者可能使用final字段和构造函数初始化? 我认为这可能只是单例bean的问题,因为原型bean是根据请求线程创建的。 我的理解是否正确?

单例Bean如何为并发请求提供服务?

关于单例bean如何详细地处理并发请求,我有一个问题。 我在StackOverflow上搜索过这个问题。 这是来自stackoverflow的示例链接 ,但我发现只有高级详细信息。 我想要了解单例bean如何服务并发请求以及系统处理器如何看到这些请求的完整细节。 我已经研究过在线系统处理器中的并发请求处理。 他们说处理器本身有一个调度程序,调度程序将决定处理哪个请求。 好的。 如果假设我有多个核心处理器,那么调度程序如何处理并发请求? 任何人都可以向我解释一个单例bean如何在JVM和系统中提供并发请求的分步过程吗? 让我用一个具体的例子来解释。 我有一个类似Sports的课程: class Sports { public void playFootball() { } public void playVolleyBall() { } } 两个请求进来。第一个请求是在创建的Sports类的单例实例上执行playFootball方法。 同时,另一个请求是在类Sports的同一个创建的单例实例上执行playVolleyBall方法。 如何使用单例实例?

在spring mvc中如何获取控制器中的上下文路径

我需要在控制器中使用应用程序上下文路径,我尝试了下面的代码,它抛出了NULLPOINTER EXCEPTION。 HttpServletRequest请求; String Path = request.getContextPath(); 请帮帮我 谢谢

Spring AOP:如何获取建议方法的注释

我想用Spring / AOP和注释实现声明性安全性。 正如您在下一个代码示例中所看到的,我使用了限制注释和参数“allowedRoles”来定义允许执行建议方法的人员。 @Restricted(allowedRoles=”jira-administrators”) public void setPassword(…) throws UserMgmtException { // set password code … } 现在,问题是在我的建议中我无法访问已定义的注释: public Object checkPermission(ProceedingJoinPoint pjp) throws Throwable { Signature signature = pjp.getSignature(); System.out.println(“Allowed:” + rolesAllowedForJoinPoint(pjp)); … } private Restricted rolesAllowedForJoinPoint(ProceedingJoinPoint thisJoinPoint) { MethodSignature methodSignature = (MethodSignature) thisJoinPoint.getSignature(); Method targetMethod = methodSignature.getMethod(); return targetMethod.getAnnotation(Restricted.class); } 上面的方法总是返回null(根本没有找到注释)。 有一个简单的解决方案吗? 我读了一些关于使用AspectJ代理的内容,但我不想使用这个代理。

如何使用存储在数据库表中的属性配置Spring bean

在我的项目中,我们想要外化Spring托管bean的属性,这对于标准的Java .properties文件非常容易,但是我们希望能够从行为类似于Map的DB表中读取这些属性( key是属性名称,value是分配给该属性的值)。 我发现这篇文章建议使用Commons Configuration但我不知道是否有更好的方法来对Spring 3.x做同样的事情。 也许实现我自己的PropertyResource或其他东西。 有什么线索吗?

自动assembly时,Spring集成测试速度很慢

我正在尝试加速我们环境中的集成测试。 我们所有的课程都是自动assembly的。 在我们的applicationContext.xml文件中,我们定义了以下内容: …additional directories 我注意到Spring正在扫描上面指出的所有目录,然后迭代每个bean并缓存每个bean的属性。 (我从spring开始查看DEBUG消息) 因此,以下测试大约需要14秒才能运行: public class MyTest extends BaseSpringTest { @Test def void myTest(){ println “test” } } 有没有办法延迟加载配置? 我尝试添加default-lazy-init=”true”但这不起作用。 理想情况下,只实例化测试所需的bean。 提前致谢。 更新 :我之前应该说过,我不想为每个测试都有一个上下文文件。 我也不认为只有测试的上下文文件才有效。 (此测试上下文文件最终会包含所有内容)

Spring bean destroy-method,singleton和prototype范围

我是Spring框架的新手,从一些教程开始学习它。 我有以下文件, #MainProgram.java package test.spring; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainProgram { public static void main(String[] args) { AbstractApplicationContext context = new ClassPathXmlApplicationContext(“Bean.xml”); HelloSpring obj = (HelloSpring) context.getBean(“helloSpring”); obj.setMessage(“My message”); obj.getMessage(); context.registerShutdownHook(); } } #HelloSpring.java package test.spring; public class HelloSpring { private String message; public void setMessage(String message){ this.message = message; System.out.println(“Inside setMessage”); } […]

如何在Spring Batch中设置multithreading?

我已经成功建立了一个Spring Batch项目教程。 我真的很想知道是否可以在“Spring级别”使它成为multithreading。 我想要的基本思路是制作一个任务列表或任务步骤,让它们被独立的线程拾取和处理,理想情况下是一个限于’n’个线程的池。 这可能吗? 如果是这样,怎么样? 有人可以从我目前所在的地方指导我到那一点吗? 我所拥有的简单项目来自本教程。 它基本上有不同的任务,可以将信息打印到屏幕上。 这是我当前的simpleJob.xml文件,其中包含作业详细信息: 我的appContext包含作业存储库bean( SimpleJobRepository ),事务管理器( ResourceLessTransactionManager )和作业启动器( SimpleJobLauncher )。 如果需要的话,我也可以提供这个代码,我只是不想用大量的XML来破坏这篇文章。 非常感谢您的帮助!