Grails Service 并发处理(笔记)

grails框架心得 用grails开发过程中,项目优化配置,系统间调用等的总结。 立即下载

grails Service是单例的,所以容易出并发问题,当出现并发时怎么处理?在调用的方法名称上面增加@Synchronized。


这个是groovy多线程的处理,非常简单就能解决异步问题。


groovy的异步用法有很多种,以下是groovy帮助文档里面的原文。

-------------------------------------------------------------


Method annotation to make a method call synchronized for concurrency handling with some useful baked-in conventions.


@Synchronized is a safer variant of the synchronized method modifier. The annotation can only be used on static and instance methods. It operates similarly to the synchronized keyword, but it locks on different objects. When used with an instance method, the synchronized keyword locks on this, but the annotation locks on a (by default automatically generated) field named $lock. If the field does not exist, it is created for you. If you annotate a static method, the annotation locks on a static field named $LOCK instead.


If you want, you can create these locks yourself. The $lock and $LOCK fields will not be generated if you create them yourself. You can also choose to lock on another field, by specifying its name as parameter to the @Synchronized annotation. In this usage variant, the lock field will not be created automatically, and you must explicitly create it yourself.


Rationale: Locking on this or your own class object can have unfortunate side-effects, as other code not under your control can lock on these objects as well, which can cause race conditions and other nasty threading-related bugs.


Example usage:


 

class SynchronizedExample {
   private final myLock = new Object()


   @Synchronized
   static void greet() {
     println "world"
   }


   @Synchronized
   int answerToEverything() {
     return 42
   }


   @Synchronized("myLock")
   void foo() {
     println "bar"
   }
 }


 
which becomes:
 
class SynchronizedExample {
   private static final $LOCK = new Object[0]
   private final $lock = new Object[0]
   private final myLock = new Object()


   static void greet() {
     synchronized($LOCK) {
       println "world"
     }
   }


   int answerToEverything() {
     synchronized($lock) {
       return 42
     }
   }


   void foo() {
     synchronized(myLock) {
       println "bar"
     }
   }
 }


 
Credits: this annotation is inspired by the Project Lombok annotation of the same name. The functionality has been kept similar to ease the learning curve when swapping between these two tools.
Details: If $lock and/or $LOCK are auto-generated, the fields are initialized with an empty Object[] array, and not just a new Object() as many snippets using this pattern tend to use. This is because a new Object is NOT serializable, but a 0-size array is. Therefore, using @Synchronized will not prevent your object from being serialized.

VMware虚拟机的安装教程 VMware 虚拟机的备份与恢复是保障数据安全和业务连续性的重要措施。综上所述,VMware 虚拟机的备份与恢复策略有多种选择,企业和用户可以根据实际需求和资源情况选择适合自己的方案,以确保虚拟机数据的安全和业务的连续性。 阅读详情

相关推荐

双三相电机控制避坑指南:为什么你的SVPWM谐波大?四矢量调制实战解析

本文深入解析双三相电机控制中SVPWM谐波大的问题,并提供四矢量调制实战方案。通过分析谐波来源、四矢量调制原理及工程实现步骤,显著降低电流THD至3-5%,提升系统效率2.3个百分点。特别适合需要优化电机控制的工程师参考。

weixin_30645617的博客 397

Grails开发项目中的错误及解决

[size=medium]Q: 如果有多个hasMany映射, 提示错误: A: 需要定义在一个语句里: static hasMany = [activites:Activity,linkmen:Linkman]; -------------------------------------------------------------------------------- Q:...

shouhuhuise的专栏 535

告别偏色!手把手教你用i1Profiler 3.5为喷墨打印机制作专属ICC曲线(附D50/D65光源选择指南)

本文详细介绍了如何使用i1Profiler 3.5为喷墨打印机制作专属ICC曲线,解决设备偏色问题。从色彩管理基础、软件配置到色块打印与测量实战技巧,逐步指导用户完成曲线制作,并提供了D50/D65光源选择指南,确保色彩还原精准。适合摄影师和设计师提升打印质量。

weixin_30613343的博客 1万+

Grails多线程批量操作例子

多线程使用不当会导致hibernate no session 数据库原数据 一个普通的更新服务类 package com.test import grails.transaction.Transactional @Transactional class TestService { def update(Test t) { t.name = t...

Jonny的博客 1294

STM32F103多通道PWM输出避坑指南:TIM1_CH1异常输出的解决方案

本文深入解析STM32F103多通道PWM输出中的TIM1_CH1异常问题,提供从时钟配置到GPIO复用的系统化解决方案。通过黄金法则配置流程和高级调试技巧,帮助开发者快速定位并解决PWM输出不稳定、占空比异常等问题,同时拓展多定时器协同和互补PWM等高级应用场景。

weixin_29194817的博客 117

rbf神经网络python预测代码_RBF神经网络预测

%用RBF网络来预测股票走势clcclear%归一化数据input=[0 0 0 0 0 0.0277;0.0177 0.0292 0.0184 0.0122 0.0264 0.0492;0.0374 0.0946 0.0393 ...

weixin_39951419的博客 1889

如何在Java中安全运行用户的groovy代码

groovy官方提供了自定义的安全配置功能,来限制groovy的能力思路是利用,在每个拦截点判断当前是否超时,超时则中断执行至于代码中的,思路也是利用拦截sleep方法,当sleep方法入参大于5000毫秒时,将入参重置为5000至此,前7种危险代码基本上能有效避免了。

飞鸟Blog 1510

中国土地市场网爬取

实习期间老板需要对土地数据进行爬取,想来想去就Google到了.应该算是种类最齐全的土地数据了。Github地址:https://github.com/AnTi-anti/china_land/tree/master。

猫敷雪 5462

groovy 框架_Groovy并发框架GPars准备好大发布

Groovy在2007年1月的到来增加了JVM的活力。 现在有一种新的功能脚本语言,它与Java紧密联系,但也引入了其他语言的概念。 在2012年初,Groovy 2.0引入了静态类型检查等功能,巩固了其在JVM中的地位。 在这段时间里,我们已经看到大量的分支项目,例如Web框架Grails,桌面框架Griffon和构建自动化工具Gradle。 尽管有一个项目在发布1.0版本之前已经花了...

717

基于CutLSTM-ATT 模型的刀具磨损预测-【一个月之内发一篇中文核心辅导】

基于CutLSTM-ATT 模型的刀具磨损预测-【一个月之内发一篇中文核心辅导】

315

【Python进阶】VSCode Python开发完全指南:从环境配置到高效调试

本文通过15个实战案例,系统讲解VSCode进行Python开发的环境配置、编码技巧、调试方法及性能优化,帮助初学者快速构建专业开发环境。

赶紧的博客 3725

java多线程的使用

对于Java多线程的理解,我以前仅仅局限于实现Runnable接口或者继承Thread类,然后重写run()方法,最后start()调用就算完事。但慢慢发现这样满足不了需求,比如说我要在线程完成之后再处理一些事情怎么办,或者我想要线程有一个返回值来让我判断线程中run方法中的程序有没有出错怎么办? (1)在控制器中使用线程池创建线程 def importFlag = false Execut...

mazhihao99的博客 1640

搜索神器Perplexity的详细使用方法(持续更新)

本文主要介绍了ChatGPT的互补工具Perplexity的详细使用方法,希望对新手有所帮助。需要说明的是,Perplexity不需要上网工具,很方便新手和小白上手使用。Perplexity的官网链接为:https://www.perplexity.ai/ 。 文章目录 1. 为什么要讲Perplexity? 2. 详细使用方法 2.1 使用要点一 2.2 使用要点二 2.3 使用要点三

herosunly的博客 8万+

Grails Service 层

Service 层 除了 Web 层 之外, Grails 还定义了service 层的概念。Grails 团队不赞成在controllers中嵌入核心的应用程序逻辑,因为这样并没有提升重用和清楚的关注点分离。 Grails中的Services在应用程序中被视为放置多数逻辑的地方 。从controllers脱离,负责处理通过重定向的请求流等等。   创建Service 你可以在终

专注于Groovy语言,grails框架与管理之道 5861

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Grails 中如何对 service 进行单元测试?

要用集成 HibernateSpec 类,要在 web profile 中执行测试,在 plugin 中测试会失败。 这篇文章 对 grails service 测试方法进行了说明,但用于 plugin 时出现问题,例如在 plugin 中放了 domain、service,想用 unit test、integration test 对 domain、service 进行测试时,会报告错误。 典型...

杨波的专栏 297

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

由写Grails过滤不良信息的Service引发的中文乱码问题

 由写Grails过滤不良信息的Service引发的中文乱码问题在一个Grails项目里面,我想写一个过滤不良信息的Service,而将过滤的规则放置在xml文件之中。以下xml文件放置不良信息,包含单词、词组和句法,支持正则表达式:filter> words>  word>fuckword>  word>反人民word>  word>去死吧word>  word>killword

四火专栏 1602

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Grails 在HttpSessionListener中使用service

在grails中使用HttpSessionListener 需要先执行grails install-templates 然后 在 \src\templates\war\web.xml 中增加 listener a1.MyListener \grails-app\services\a1\MyService.groovy package a1 class MySe

Happy for Nothing 2293

grails service层认识

grails定义service layer的概念,是想规范应用的层次结构,阻止核心的应用逻辑嵌入到 controller里;将逻辑嵌入控制器,在传统的web框架里也是不提倡的,它的坏处这里就不说了; grails里的service应该被看作是放置大部分应用逻辑的地方。controller负责处理请求,然后重定向等工作;这样应用的逻辑就完全独立出来,可以被重用,同时降低了系...

com_a的专栏 235

如何用3个步骤掌握Grails框架:从概念到实战的完整指南

Apache Grails是一个基于Groovy语言构建的强大Web应用框架,它通过"约定优于配置"的设计哲学,让开发者能够快速构建现代化的Web应用程序。Grails框架深度整合了Spring Boot的强大功能和Groovy的简洁语法,为Java开发者提供了一条高效且优雅的Web开发路径。 ## 问题场景:传统Web开发的复杂性挑战 想象一下,你正在为一个中型电商平台开发后台管理系统。传统

gitblog_00487的博客 1080

Grails入门指南

1.创建项目:create-app ToysStore2.切换到项目目录:cd ToysStore3.创建领域类:create-domain-class toy4.到domain目录下面找到Toy.groovy文件,修改为下面内容:class Toy { int id String toyName String unitPrice}5.创建控制器:create-controll

2712

grails service

   http://blog.youkuaiyun.com/zhangjianying/archive/2008/09/10/2909715.aspx  (Xfire 创建Grails web服务)http://ch-linghu.3322.org/blog/entry/101 (python中调用grails的web服务)http://www.woodpecker.org.cn/diveinto

huangyue158的专栏 483

Grails3 domain里面使用service

Grails3.2-版可以直接在domain中注入service,在Grails3.2+中默认关闭了自动注入功能 开启方式 方式一 在application.groovy中配置全局映射,若没有此脚本需新建 grails.gorm.default.mapping = { autowire true } 方式二 在需要注入bean的domain中添加映射 static m...

斗战圣佛91的博客 221

Grails Controller层

Controller层中方法写法: class TestController { def testService def index() { } def main(){//方法名称与views中test文件夹下gsp名称一致时,可直接返回页面 //如url:localhost:8080/test/main,可直接跳转到main.gsp }

cat_book_milk的博客 1693

Grails 命令行

Grails的命令行系统是构建于 Gant 之上,Gant就是使用Groovy对 Apache Ant 进行了简单的包装。 然而,Grails通过约定规则以及grails命令的使用带来了一些改进。当你键入如下内容时: grails [命令名称] 为了Gant脚本的执行,Grails会在下列目录中做一次搜索: USER_HOME/.grails/sc...

justJavaC的专栏 595

grails中的相关约定

Grails是一个“约定优于配置”的框架 1、Domain类的约定 domain类都放在grails-app/domain这个文件夹下,doamin类所有字段默认都被持久化,不论字段访问范围(如public,private等)。类名将为表名,类中的字段名对应表中的字段名. 2、

ziluolanzhang的专栏 1023
上一篇: Grails Service 层
下一篇: Grails Service 获取session,response,request,servletContext
欧德曼
博客等级 码龄19年 63粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值