Tag: 春季

Spring-Hibernate在webapp中使用,什么是Thread安全会话管理的策略

我正在使用Spring和Hibernate开发一个Web应用程序,我非常着迷于使应用程序线程安全并能够支持基于我的老板建议的重负载我最终编写自己的session和session container来实现session per request pattern 。 另外我有很多DAOs而且我不愿意为所有DAOs编写相同的save method我复制粘贴这个Hibernate GenericDAO (我不能说它是同样的事情,因为当时hibernate不归jboss所有)和做管道工作,并且在压力下,所有这些都变得很复杂,并且在生产中,StaleObjectException和重复的数据是正确的,我觉得是时候回顾我已经完成的工作,简化它并使其更加强大数据处理。 你应该知道的一件事是,一个请求涉及许多DAO。 有石英运行数据库中的一些更新。 尽管我想要更好地调整一切,但我没有时间做必要的研究,而Hibernate则是一种巨大的(学习)。 所以就是这样,我想借用你的经验并提出一些问题来了解要采取的方向。 问题1 :Hibernate生成的uuid是否足够安全,可以用于线程环境并避免StaleObjectException? 问题2什么是在threadSafe场景中使用hibernate getCurrentSession的最佳策略(我已经阅读了关于threadlocal的东西,但没有得到太多的理解,所以没有这样做) 问题3 :HIbernateTemplate会采用最简单的解决方案吗? 问题4 :如果要实现连接池并调整生产服务器的需求,您会选择什么? 请毫不犹豫地将我指向博客或在线资源,我需要的只是一种适用于我的场景的方法。 如果你这样做,你的方法。 感谢您阅读本文,欢迎大家的想法……

Hibernate Session刷新行为

我在一个网络应用程序中使用Spring和Hibernate, SessionFactory被注入到DAO bean中,然后这个DAO通过webservicecontext在Servlet中使用。 DAO方法是事务性的,在我使用的方法之一… getCurrentSession()。save(myObject); 一个servlet使用传递的对象调用此方法。 更新似乎不会立即刷新,大约需要5秒才能看到数据库中的更改。 调用DAO更新方法的servlet方法需要几分之一秒才能完成。 DAO的@Transactional方法完成后,可能不会发生冲洗? 它似乎不是一个规则 [我已经看到了]。 那么问题是:在每个DAO方法之后如何强制会话刷新? 这可能不是一件好事,但谈到Service层,一些方法必须以立即刷新结束,而Hibernate Session行为是不可预测的。 那么如何保证我的@Transactional方法在该方法代码的最后一行之后保留所有更改? getCurrentSession().flush() is the only solution? ps我在某处看到@Transactional与DB Transaction相关联。 方法返回,必须提交事务。 我没有看到这种情况发生。

spring-boot redis:如何使用户的所有会话无效?

我是redis的新手。 我已经按照本教程使用了redis的HttpSession。 https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html 现在我的应用程序已“退出所有设备”选项。 单击该按钮时,如何删除或使该用户的所有会话无效? 此外,当用户更改其密码时,如何使除当前会话之外的所有会话无效? 编辑: 我尝试使用Session Registry。 @Autowired private FindByIndexNameSessionRepository sessionRepository; @Autowired FindByIndexNameSessionRepository sessions; @RequestMapping(value = “/logoutalldevices”, method = RequestMethod.GET) public Response test(HttpServletRequest request, HttpServletResponse response) throws Exception { SpringSessionBackedSessionRegistry sessionRegistry = new SpringSessionBackedSessionRegistry(sessionRepository); Collection usersSessions = sessions .findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, “myUserId”) .values(); usersSessions.forEach((temp) -> { String sessionId = temp.getId(); // sessionRegistry.removeSessionInformation(sessionId); SessionInformation info = […]

是否可以使Spring ApplicationListener监听两种或更多类型的事件?

我有两种不同类型的事件,我希望我的class级能够听取并相应地处理(以不同的方式)。 我试过: public class ListenerClass implements ApplicationListener, ApplicationListener 这给了我一个错误,你不能用不同的参数两次实现相同的接口。 如果没有实现ApplicationEvent的侦听器(或Foo和Bar将实现的一些其他常见接口)并使用instanceof来确定要采用的路径,我还有其他选择吗? 谢谢!

如何将Spring Application Context事件与其他上下文联系起来

我有一个带有两个上下文的Spring Web应用程序:一个( applicationContext )由ContextLoaderListener构建,另一个( webContext )由DispatcherServlet构建。 在applicationContext是一个bean( org.springframework.security.authentication.DefaultAuthenticationEventPublisher ),用于触发spring上下文事件。 但事件的接收者是在webContext定义的。 那个接收器没有得到这个事件。 (如果将接收器作为测试目的放在applicationContext那么它就会得到事件,但我不能这样做,因为我需要webContext来实现它的function。) 所以我的问题是,如何将事件从applicationContext桥接到webContext ?

如何防止Spring中重叠的时间表?

@Scheduled(fixedDelay = 5000) public void myJob() { Thread.sleep(12000); } 如果上一个例程尚未完成,如何防止此弹簧作业运行?

Java Spring @Scheduled任务执行两次

我在这里有一个简单的测试方法,设置为每5秒运行一次,但是看看System.out,你可以看到它似乎在做一些奇怪的事情。 @Scheduled(cron=”*/5 * * * * ?”) public void testScheduledMethod() { System.out.println(new Date()+” > Running testScheduledMethod…”); } 输出: Wed Jan 09 16:49:15 GMT 2013 > Running testScheduledMethod… Wed Jan 09 16:49:15 GMT 2013 > Running testScheduledMethod… Wed Jan 09 16:49:20 GMT 2013 > Running testScheduledMethod… Wed Jan 09 16:49:20 GMT 2013 > Running testScheduledMethod… Wed […]