`
miraclerz
  • 浏览: 99857 次
社区版块
存档分类
最新评论

play 并发问题

阅读更多

公司用play2.26架构微服务,底层实现权限登陆控制各接口验参功能

其中拦截器是用继承下面这个类来实现的

public abstract class Action<T> extends Results

{

  public T configuration;

  public Action<?> delegate;

 

  public abstract F.Promise<SimpleResult> call(Http.Context paramContext)

    throws Throwable;

 

  public static abstract class Simple extends Action<Void>

  {

  }

}

@With(CheckAction.class)

@Target({ElementType.TYPE,ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface Check {

 

String token() default "token";

 

/**

* 需要检查的接口参数名

* @return

*/

String[] args() default {};

 

/**

* 该接口是否需要进行权限检查

* @return

*/

boolean authCheck() default false;

 

boolean transactional() default false;

}

 

public class CheckAction extends Action<Check> {

 

private static ThreadLocal<UserToken> tl = new ThreadLocal<UserToken>();

 

private static ThreadLocal<String> tl2 = new ThreadLocal<String>();

 

 

@Override

public Promise<SimpleResult> call(Context ctx) throws Throwable {

 

String tokenParam = configuration.token();

String token = null;

String[] args = configuration.args(); //注意这里的configuration就是并发点,这里导致拿注解上的参数有误

 

                        return this.delegate.call(ctx); //注意这里的delegate也是并发点,这导致直接请求错误,即a请求到这时有可能已经变成b请求的delegate,这样一回调导致数据直接返回给b请求了

 

 

解决方法,先调试发现这个类始终只有一个,即是单例模式

 

经过排查发现在这个全局类里

public class AppBootstrap extends GlobalSettings

@Override

public <A> A getControllerInstance(Class<A> clazz) throws Exception {

/*String name = clazz.getName();

Object o = map.get(name);

if(o==null){

o = clazz.newInstance();

map.put(name, o);

}

return (A) o;*/

//这个东西搞死人了,这里不能用单例,不然CheckAction 里的configuration和delegate 会出现并发

return (A)clazz.newInstance();

}

有上面这个方法 调试发现这里用map实现了个单例。。。。。

去掉单例模式即解决

 

 

 

 

 

分享到:
评论

相关推荐

    play framework api,play! framework api,play api

    2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web应用的并发性能。 3. **路由系统**:Play Framework的路由文件定义了URL到Action的映射,允许开发者灵活地控制请求处理逻辑。 4...

    Playframework 1.2.7 sdk zip包 play1.2.7.zip

    1. **无服务器状态**:Play遵循无状态原则,所有的数据都存储在客户端或者数据库中,这使得服务器可以轻松地处理高并发请求。 2. **即时重启**:当你修改代码后,Play会自动编译并重新加载改动,无需手动重启服务器...

    playframework中文教程.zip

    4. **异步I/O**:Play 使用Akka框架实现非阻塞I/O,可以处理大量的并发请求,适合构建高并发的Web应用。 5. **RESTful API支持**:Play 鼓励开发者使用HTTP协议的特性来构建应用程序,便于构建服务化和微服务化的...

    play框架jar包

    - **异步I/O**:Play基于Akka框架,采用非阻塞I/O,能够处理大量并发请求,适合构建高性能的Web应用。 - **热重载**:在开发过程中,Play支持代码热重载,修改后无需重启服务器即可看到效果,极大地提高了开发效率...

    Play Framework2本教程

    12. **社区与生态系统**:Play拥有活跃的社区,提供了丰富的插件和文档,以及大量的示例应用,有助于开发者解决问题和学习新技能。 通过阅读《Play Framework最新教程.pdf》和《Play框架教程.pdf》,你将深入理解...

    play 1.2.5.2

    4. **异步I/O**:Play利用Akka框架的反应式编程模型,实现了非阻塞I/O,提高了并发处理能力。 5. **模板引擎**:Play内置了模板引擎,允许开发者使用简单的语法编写HTML,同时支持嵌入Java或Scala代码,实现动态...

    Play Framework Cookbook.pdf

    - **企业级应用开发**:由于 Play Framework 提供了强大的并发处理能力和灵活的架构支持,非常适合用于构建大型的企业级应用。 - **社交平台建设**:利用 Play Framework 的 WebSocket 支持功能,可以轻松实现消息推...

    playframework部分介绍及部分功能简介,小实例一个

    2. **异步编程模型:** 与传统的Web框架不同,Play 使用非阻塞I/O模型,这使得应用程序在处理高并发请求时性能更优,降低了服务器资源的消耗。 3. **热部署:** Play 提供了热部署功能,这意味着你可以在开发过程中...

    Play for Java.pdf

    - **异步处理**:异步处理是Play框架的一大特点,它通过非阻塞的方式处理网络请求,有效避免了线程阻塞问题,显著提升了系统的并发能力。 通过上述内容可以看出,《Play for Java》这本书全面覆盖了使用Play框架...

    play 1.1框架

    8. **Akka集成**:尽管Play 1.1版本较早,但它已经集成了Akka actor模型,这为处理并发和异步操作提供了强大的支持,增强了应用的性能和可扩展性。 9. **全球化与本地化**:Play框架提供了内置的i18n支持,方便...

    play framework 框架手册 word 版

    10. **异步编程**:Play支持异步Jobs、预定义任务和HTTP下的异步编程,如使用Continuations、Callbacks和HTTP响应流,以及WebSockets,提高了系统的并发能力。 11. **测试**:Play提供了丰富的测试工具,包括单元...

    play framework 学生信息管理系统

    7. **异步编程**:Play Framework 基于Akka Actor模型,支持非阻塞I/O和异步处理,这使得它可以高效地处理高并发请求。 8. **测试**:Play Framework 提供了集成测试工具,如`play-test`模块,便于编写单元测试和...

    playframework 框架学习之路 1

    2. **异步编程模型**: Play使用Akka Actor系统进行异步处理,这意味着它可以处理大量并发请求,提高应用程序的性能。这种非阻塞I/O方式使得Play特别适合构建高并发的Web应用。 3. ** MVC 架构**:Play遵循MVC设计...

    scala PLAY 框架 sbt仓库

    - **Akka集成**:Play框架基于Akka,提供了强大的异步处理能力,可以处理高并发场景。 - **Action**:Action是处理HTTP请求的核心组件,你可以定义自定义的Action来处理特定的HTTP请求。 - **测试支持**:Play提供了...

    GooglePlay代码及服务器部署

    5. **崩溃报告**:Google Play服务还包括Crashlytics,用于收集和分析应用崩溃日志,协助开发者定位和修复问题。 6. **云消息推送**:Firebase Cloud Messaging (FCM) 是Google提供的推送通知服务,允许开发者向...

    play框架jar包,版本play-1.2.7

    10. **社区支持**:虽然版本较旧,但Play框架拥有活跃的社区,开发者可以在官方论坛和Stack Overflow上找到大量的问题解答和解决方案。 综上所述,Play框架1.2.7为Java开发者提供了一套高效、灵活的Web开发环境,...

    Play Framework Cookbook

    - **非阻塞 I/O**:Play Framework 基于 Akka 框架实现了非阻塞 I/O,这使得在处理大量并发请求时无需担心性能瓶颈问题。本书会详细介绍如何利用这一特性构建高并发的应用程序。 - **模块化架构**:该框架支持模块化...

    Play Framework Essentials

    在Play框架中,开发者可以利用其非阻塞I/O和对RESTful架构的完美支持,创建响应迅速、高并发的应用程序。 #### Play框架的特点 - **无状态架构**:简化了Web应用的开发,易于扩展。 - **可伸缩性**:支持基于actor...

    play-1.2.4 jar

    7. **异步I/O**:Play基于Akka框架,利用非阻塞I/O模型,可以处理大量并发请求,提高了Web应用的性能。 8. **测试支持**:Play框架内建了测试工具,可以方便地进行单元测试和集成测试,如模拟HTTP请求,测试控制器...

    Play_Framework(手册、配置文档、标签等)

    2. **异步编程模型**:Play Framework 使用非阻塞I/O和事件驱动模型,使得它在处理高并发请求时表现优秀,特别适合构建实时Web应用。 3. **路由系统**:Play 的路由文件定义了URL到控制器方法的映射,提供了声明式...

Global site tag (gtag.js) - Google Analytics