jenkinsh 全局属性性问题,怎么解决

service全局变量引起的并发问题
先看下面小段代码,一个controller,一个service。
&&&&&&&controller.java代码:
&&&&........
&&&&@Autowired
&&&&&private
XXXService xxxS
&&&&........
&&&&@RequestMapping("/doXXX.do")
&&&&public
void doXXX(){
&&&&&&&&.....
&&&&&&&&xxxService.saveXXX(String
content,....);
&&&&&&&&.....
&&&&XXXService.java代码:
&&&&private
String content;
&&&&......
&&&&private
void init(){//清空请求参数
&&&&&&&&content
&&&&public
boolean saveXXX(String content, ......){
&&&&&&&&this.init(content,
&&&&&&&&this.content
&&&&&&&&//业务逻辑处理
&&&&以上这段代码在访问量不构成并发时不会出现什么问题。但当一个请求还未完成,另一个请求已经开始执行的情况下就会出现问题(并发):第二个请求执行执行init()方法会将第一个请求的content变量设置为null或它本身的值,这样数据就被篡改了。
&&&&编码者这样写的目的是因为content等变量需要在多个方法中使用,而且变量很多,但又不想通过方法参数的方式来传递,故使用成员变量。
&&&&先看看为什么会出现这种情况。由于系统采用springmvc框架,springmvc核心控制器DispatcherServlet
默认为每个controller生成单一实例来处理所有用户请求,所以在这个单一实例的controller中,它的XXXService也是一个实例处理所有请求,这样XXXService的成员变量就被所有请求共享。这样就会出现并发请求时变量内容被篡改的问题。
&&&&那么出现这种问题如何解决呢?&
&&&&第一种方式:既然是全局变量惹的祸,那就将全局变量都编程局部变量,通过方法参数来传递。
&&&&第二种方式:&jdk提供了java.lang.ThreadLocal,它为多线程并发提供了新思路。&(当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本)
&&&&&&&&&那么在什么地方使用ThreadLocal呢?什么变量是请求公用的就将该变量托付给ThreadLocal来管理其线程副本,所以我们在xxxService中使用它。
&&&&&&&&XXXService.java代码:
&&&&&&&&private
ThreadLocal&contentTL = new
ThreadLocal();
&&&&&&&&//private
String content;使用contentTL代替
&&&&&&&&......
&&&&&&&&public
boolean saveXXX(String content, ......){
&&&&&&&&&&&&this.contentTL.set(content);&&
&&&&&&&&&&&&//业务逻辑处理
&&&&&&&&&&&&//在各方法中使用content时候用this.contentTL.get()代替
&&&&&此类并发篡改数据的问题,可以在开发工具中设置断点调试的方式来模拟并发。即第一次请求运行到断点时,查看content内容,并且不让程序继续往下运行,同时再发起一个请求,查看content内容。如内容是第一次请求的内容,并且让第一个请求跑完后,第二个请求到断线处的content正确时,可以确定不会出现并发问题。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。每日登录:+1西币&+1积分
&下次自动登录
绑定第三方账号登录 & & &
扫描二维码登录支持中心移动端
获取动态密码
售前文档售后文档热门视频系列热门版区售后服务概述自助服务帮助信息
You are here:
热点活动:
置评已完成,谢谢!
您现在可以为该问题添加标签。
全局变量 - 已解决问题
各位老师:我的840DSL&系统,从“参数”-“全局”-“GUD&菜单下查询,我想找到GUD8和GUD9,可是没有,请问我怎样能添加进去这个变量,再问一个问题,如果我要添加一个其它名字的全局变量文件名可以吗?例如:添加一个GUD10或其他的名字,可以随意命名吗?求指点。
产品版区:
悬赏分:10 | 解决时间: 11:29:03 | 提问者:& - 新生&nbsp&nbsp第1级
问题ID:95263
西门子GUD&-&global&variables,即全局变量GUD,在所有程序中均有效,如果要对某个程序灵活使用,就需要使用变量和参数,而不是使用恒定值。SINUMERIK&可以变量的形式来执行所有&CNC&功能和地址。变量的名称可由用户任意定义。还可以使用各种属性来分配读写保护。这意味着,可通过一种清晰、独立的方式来编写零件程序,然后根据特定机床要求进行修改,例如,自由选择轴和主轴地址名称。全局变量&(GUD)&,它们可在用户数据下面的参数操作区域中显示,并可在这里进行更改。操作顺序:1.按下HMI的软键“&User&data&,显示垂直菜单&Global&user&data&窗口,2.通过“GUD+”和“GUD-”可以查看GUD1到GUD9数据,3.修改用户数据&时,将光标移动到你要修改的用户数据上,输入新值,或者通过“选择键”选择一个新值,新值马上生效。如图示_西门子840DSL全局变量GUD&如果要添加一个其它名字的全局变量文件名-GUD10,则必须编辑DEF/MAC文件,当按下ETC按键即扩展键时,可以看到“显示系统变量”的软键&Definition&files&;,可以完成添加GUD10的工作。
图片说明:&&
顶级工程师&nbsp&nbsp第12级&
以下网友赞了您的问题:
填写您的评论...
提问者对于答案的评价:详细,受益了
本版相关问题
本版精华问答
等您来回答
作者/最新回复
最后回复时间
貌似只能选择GUD&然后在GUD下添加你i昂要的变量吧!别的还真没试过。
- 资深学长&nbsp&nbsp第3级
& 08:29:59
参详《840Dsl通用型手册》第177页的全局变量GUD定义及操作步骤。
- 中级工程师&nbsp&nbsp第10级
& 09:47:35
上一页1下一页&
扫描打开手机版
支持中心新发布“关注”功能了!实时查看彼此动态,更方便地进行技术交流。
不管是“关注”与“被关注”,相信都是一个美好的开始!
还有多重奖励派送,快快行动起来吧!
20秒帮我们优化支持中心!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
欢迎您来到找答案
在“找答案”,已有超过7万个被解决的技术问题供您参考!
西门子技术专家亲自把关!常规的,简单的问题,在这里您都可以找到答案!
遇到了问题,就来“找答案”提问。
点击搜索框右侧的提问按钮,只需2步就能成功提交问题!分分钟就有无数大侠前来帮你。
在“找答案”每天都有大量的新问题。
别犹豫,只需要点击问题下方的“我要回答”就能参与。答题不光有积分相送,也会给您积攒大侠人气。
“找答案”定期开展各种有奖活动期待您的参与。
更有机会参加西门子高端用户峰会。领略西门子的博大精深!ajax给全局变量赋值问题解决示例
字体:[ ] 类型:转载 时间:
ajax默认是异步请求,如果要在$.ajax({里面给全局变量赋值,需要改为同步操作,即加上async : false,就可以了
今天在做项目时,遇到了一个问题。我用的是ajax,要在$.ajax({里面给一个全局变量赋值,结果死活赋值不上,纠结了好半天,后来上网查了查,才知道,ajax默认是异步请求,(当要赋值时,此时的值没有拿到,所以赋值不成功)如果要在$.ajax({里面给全局变量赋值,需要改为同步操作,即加上async : false,就可以了。
代码如下: $.ajax({ type:"post", url:"a.action", data: {}, dataType: 'text', async : false,//设置为同步操作就可以给全局变量赋值成功 success:function(data){ usersname =//usersname为前面声明的全局变量 } });
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具解决方法:
1.给每一个头文件加上条件编译:
注:此方法不是解决上述问题的方法,只是解决multiple
definition of的一个方法。
当多个文件包含同一个头文件时,而头文件中没有加上条件编译,就会独立的解释,然后生成每个文件生成独立的标示符。在编译器连接时,就会将工程中所有的符号整合在一起,由于,文件中有重名变量,于是就出现了重复定义的错误。&
给每一个头文件加上条件编译,避免该文件被多次引用时被多次解释,这是个应该是习惯。这个方法会解决大部分低级问题。
条件编译示例
#ifndef TEST_H
#define TEST_H
2.使用extern定义全局变量:
可以把所有的全局变量放入一个头文件 global.h (名字随意起,但要加条件编译)中,每一个变量前面加extern,声明一下这些变量将在其它文件中定义。 然后建立一个和头文件名字对应的.c or .cpp文件 如global.c。在里面声明所有的全局变量。例如:void(*Handl_Display)();
然后,让涉及到全局变量的文件include ”global.h“。这样编译时,会先对global.c编译生成一个global.o ,然后再和其它文件的.o链接生成可执行文件。
简单一点说,就是在变量前加extern,之后变量的声明放在.c中。
3.使用Static修饰:
在变量前加static,声明成静止变量。
这个方法虽然可以解决multiple definition的问题,但是却会引发其他问题。
问题如下:
三个文件,a.h,a.c,b.c;
在a.c和b.c 都include了a.h。
在b.c中调用a.c中的函数对a.h中的变量进行赋值,但事实上b.c中的变量仍没被赋值。
问题分析:
static的含义是迫使那个变量只在某个文件可见。&
假定你在头文件定义&
且这个头文件分别被a.c和b.c包含;
实质是在a.c和b.c里会分别定义一个名字叫x的变量,两个x毫无关系。
在a.c里修改x,他不会导致b.c里的x变化.
下面附上我的代码测试
***********************************************************************************************************************
in &test_global.h&
#include &iostream&
#include &stdio.h&
#include &vector&
extern vector&int&
extern void func();
********************************
in &test_global.cpp&
#include &test_global.h&
vector&int&
void func(){
& vec.push_back(1);
********************************
in &test_global1.cpp&
#include &test_global.h&
void func1(){
& vec.push_back(2);
*******************************
in &test_global2.cpp&
#include &test_global.h&
void func2(){
& vec.push_back(3);
int main(){
& func2();
& vec.push_back(6);
& for(unsigned int i = 0; i & vec.size(); i++){
& & cout && vec[i] &&
& return 0;
*******************************
本文已收录于以下专栏:
相关文章推荐
1 //file_NO2:hello.cpp
2 #include
3 #include&hello.h&
5 hello::hello(...
最近的项目里,由于我想重载结构体的==操作符,然而大意的我把重载的过程写在了头文件里,所以导致了multiple definition of的错误。现在总结下解决方法:首先,最关键的,不要把全局变量以...
说明:出现这个错误,请你先检查重复定义的变量是否是定义在了.h头文件中,如果是,请您耐心的看完这篇文章,他会告诉你错误的根本原因。
如果你很着急,不想弄清楚原因,请直接按下面的方法更改:
假设重复...
在编译程序的时候,遇到了一个问题,花点时间记录一下:在Qt中创建一个类后,一般是先在.h文件中声明变量与函数,然后在对应的.cpp文件中对各个函数进行定义,这在往常使用中没有任何问题,今天在使用Qt时...
人有的时候就是这样,稍微知道点知识就觉着自己什么都会,就浮躁了,实际只是一瓶子不满半瓶子晃荡的状态,今天就写点基础的东西,也是当前遇到的,以前改改就过去了,没有深究其原因,今天就给它所清楚了,也算弥补...
test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问题),但是无法防止变量被重复定义。
今天遇到一个问题,与下面描述情况类...
【问题背景】
使用NSIS打包,使用编辑器VNISEdit打开打包脚本XX.nsi,点击F9进行编译,结果报错“out of memory”。报错信息如下:
首先检查需要打包文件大小,一共...
LZ看这个问题网上找半天没有解决的,最后只能放弃,虽然程序
一、java安装及环境变量设置
1.首先下载JDK的最新版本。可以去/javase/downloads/index.jsp下载最新版本JDK1.6。我安装在&...
他的最新文章
讲师:姜飞俊
讲师:汪木铃
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 swift 全局属性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信