hiberante复合主键+oscache 缓存无法命中问题

本文介绍了一个关于Hibernate复合主键导致缓存泄漏的问题及其解决方案。通过覆盖toString方法解决了因缓存无法命中造成的内存泄漏。
最近一个项目做压力测试的时候发现内存不断攀升,从jconsole观察感觉内存有泄漏问题。
安装jprofiler,跟踪内存对象的变化,发现 oscache中不断添加对象,估计和hiberante和oscache有关系,debug到代码内部,代码使用到了hibernate的复合主键,复合主键实现类没有覆盖掉toString方法,而hibernate的cache用到了这个方法,导致cache无法命中,同一个对象不断存到cache中。覆盖掉toString方法后,问题解决
将 Spring MVC + Hibernate 项目迁移至 Spring Boot + Vue 项目可按以下步骤进行: ### 后端(Spring Boot) #### 1. 创建 Spring Boot 项目 可以使用 Spring Initializr(https://start.spring.io/ )来创建一个基础的 Spring Boot 项目,选择所需的依赖,如 Spring Web、Spring Data JPA 等。 #### 2. 配置依赖 将原 Spring MVC + Hibernate 项目中的依赖迁移到 Spring Boot 项目的 `pom.xml`(如果是 Maven 项目)或 `build.gradle`(如果是 Gradle 项目)中。同时,去除原项目中与 Spring MVC 手动配置相关的依赖,因为 Spring Boot 会自动配置大部分功能。例如,如果原项目使用了 Spring 的 XML 配置文件,现在可以用注解替代。 #### 3. 数据库配置 把 Hibernate 的配置迁移到 Spring Boot 的 `application.properties` 或 `application.yml` 中。例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/your_database spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true ``` #### 4. 迁移代码 将原项目中的实体类、DAO 层、Service 层代码迁移到 Spring Boot 项目中。在 Spring Boot 中,使用 `@Entity`、`@Repository`、`@Service` 等注解来替代原有的配置。例如: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // getters and setters } ``` #### 5. 控制器迁移 将 Spring MVC 的控制器迁移到 Spring Boot 中,使用 `@RestController` 注解替代原有的 `@Controller` 注解,以支持 RESTful 风格的 API。例如: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/users") public String getUsers() { return "User list"; } } ``` ### 前端(Vue) #### 1. 创建 Vue 项目 使用 Vue CLI 创建一个新的 Vue 项目: ```bash npm install -g @vue/cli vue create my-vue-project ``` #### 2. 与后端集成 在 Vue 项目中使用 `axios` 等工具与 Spring Boot 后端进行数据交互。例如: ```vue <template> <div> <button @click="fetchUsers">Get Users</button> <ul> <li v-for="user in users" :key="user.id">{{ user.name }}</li> </ul> </div> </template> <script> import axios from 'axios'; export default { data() { return { users: [] }; }, methods: { async fetchUsers() { try { const response = await axios.get('http://localhost:8080/users'); this.users = response.data; } catch (error) { console.error(error); } } } }; </script> ``` #### 3. 部署与测试 将 Spring Boot 后端和 Vue 前端分别部署到服务器上进行测试。可以使用 Nginx 等工具进行反向代理,将前端和后端的请求进行统一处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值