关于springboot同时请求时出现的对象被覆盖的问题? 400 报错
@Autowired private Plan plan;
@PostMapping(value="/insert",produces = "application/json;charset=UTF-8") public Message insert(@RequestBody JSONObject jsonParam) { log.info("新增流程:"+jsonParam.toJSONString()); plan = JSONObject.toJavaObject(jsonParam,Plan.class); try { if(planService.insertPlan(plan)==0){ return Message.fail(); } 。。。 }
@Component @Data public class Plan { 。。。 }
开发项目时遇到接口调用方同时有两个请求进来同一个方法,存入plan对象时,数据库报主键冲突,难道springboot自动注入的实体类在不同请求进来时 指向的是同一个对象地址吗 为什么不会自动new一个新的对象呢?
有可能是我加了注解Data、导致的吗
plan不要定义为成员变量,直接局部变量即可。
因为你 JSONObject.toJavaObject(jsonParam,Plan.class) 本身就相当于每次请求都new 一个新的对象,另外看你的代码,实际上应该是可以直接将 请求方法的参数定义为 Plan 而不是 JSONObject 。
你的这个方式有点类似于struts的写法,但springMVC和struts是不一样的
######之所以不直接用对象接收,是因为接收的参数不只是plan对象的,还有其他的对象的数据,因为之前都是用公司框架开发,springboot早年学的已经忘的差不多了,这次自己写一个接口服务使用了springboot,经网友提醒才知道默认是单例的,尴尬了######单例。
plan不要定义成类变量。
为什么要加@Autowired注解?
######spring的話可以配置bean,有個參數可以表示不是單列;還有,自己new就好了,麻煩那麼多事幹嘛;
######了解下@Component吧
######实体类为啥还要加注解啊?
######new Plan()
######覆盖是因为plan是默认单例
这种代码就是明显有问题的,plan应该是个实体类,你把他加载成bean,每次都new一个
######plan是单例的哦。
######Plan你是用于中转数据用的,你居然家了Component注解让给spring管理,加上这个你又在用的地儿通过注入获取实例,这种方式获取的实例是单列的。######实体类加Autowired?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。