100分求解集群环境下openjpa查询为null,但数据库里面存在该记录

浪里花 2015-05-06 11:09:10
先说下持久层环境:spring data jpa(1.1.0)openjpa2.2.0
先说下业务流程:
先登录拿到一个token,该token会入库,再通过该token再去请求相关数据(数据库只有一个)
相关方法入下:

public class AccessToken {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
@NotNull
private String token;

@Column(unique = true, nullable = true)
private String refreshToken;

}

public class AccessTokenService{
@Autowired
AccessTokenRepository accessTokenRepository;
public AccessToken saveAccessToken(AccessToken token){
//添加AccessToken 其他属性....
repository.save(token);
return token;
}
}
@Controller
public class UserController extends BaseController{
@Autowired
AccessTokenService service;
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public AccessToken userLogin(
String username,String password,
HttpServletResponse response) throws IOException {
//校验账号和密码....
AccessToken token = new AccessToken();
service.saveAccessToken(token);
return token;
}
}

登录流程完成,下面是通过token去访问其他信息
相关查询方法如下;先校验该token是否存在,存在继续下一步,不存在返回错误信息

@Repository
public interface AccessTokenRepository extends CrudRepository<AccessToken, Long> {
AccessToken findByToken(String token);
}

上面的代码在单机环境下面没有问题,在集群环境下用户在已经登录的情况下AccessTokenRepository类的findByToken方法查找的数据经常为null,但是数据库里面是有的,通过分析,出现情况的方式是登录请求访问的是A机器,通过token拿资源的请求访问的不是A机器,换句话说就是两次请求没有在同一台机器上面,两次请求没在同一台机器上面出现上述情况的几率大概有80%,出现上述情况我们检查数据库里面该记录是存在的
求解这是为啥?初步分析是openjpa的持久化实体的三个状态引起的(游离态,持久态,托管态),不知道是不是这个原因


...全文
227 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪里花 2015-05-18
  • 打赏
  • 举报
回复
等了这么久,还是没有人呢
浪里花 2015-05-06
  • 打赏
  • 举报
回复
引用 4 楼 liangtu33 的回复:
引用 2 楼 qq467339640 的回复:
[quote=引用 1 楼 liangtu33 的回复:] 数据库同步问题
只有一个数据库,数据库同步问题怎么来的?
是不是事务?[/quote] 加了事务注解也是一样的问题
liangtu 2015-05-06
  • 打赏
  • 举报
回复
引用 2 楼 qq467339640 的回复:
引用 1 楼 liangtu33 的回复:
数据库同步问题
只有一个数据库,数据库同步问题怎么来的?
是不是事务?
qq_26893375 2015-05-06
  • 打赏
  • 举报
回复
关注+1 目前项目正在做集群
浪里花 2015-05-06
  • 打赏
  • 举报
回复
引用 1 楼 liangtu33 的回复:
数据库同步问题
只有一个数据库,数据库同步问题怎么来的?
liangtu 2015-05-06
  • 打赏
  • 举报
回复
数据库同步问题

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧