spring boot(学习笔记第十一课)

spring boot(学习笔记第十一课)

  • Session共享,JPA实现自动RESTful

学习内容:

  1. Session共享
  2. JPA实现自动RESTful

1. Session共享

  1. Session共享面临问题

    • spring boot默认将session保存在web server的内存里面,会产生什么问题呢。在这里插入图片描述
      如上图所示,有nginx作为服务器前置负载均衡器的时候,第一次访问将session保存在web server 1中的内存中,但是第二次访问的时候,假如重新定向到web server 4的时候,将无法正确取得session

    • 使用redis解决问题
      在这里插入图片描述
      使用redis之后,使每次web serversession数据都保存到唯一的redis的,这样重定向到那个web server,最后都会从redis的内存取得,所以每次取得和保存的session数据都一致。

  2. Nginx负载均衡

    • 创建nginx server 最好使用sudo -i注意,这里使用VMware进行创建
      cd /data
      mkdir nginx
      wget https://nginx.org/download/nginx-1.27.0.tar.gz
      cd nginx-1.27.0
      yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++
      ./configure
      make
      make install
      
    • 启动nginx server
      • 如果有process占用80端口,通过ss -tulnp | grep :80命令确认。
      • 如果有process占用80端口,通过ss -tulnp | grep :80命令确认。
      • 之后定位到$pid,使用kill -9 $pid结束进行。注意,这里$pid意味需要替换的变量
    • 尝试访问nginx server
      http://192.168.12.130/ 注意,这里采用http,不能采用https,如何配置httpsnginx中需要确认
      在这里插入图片描述
    • 修改nginx.conf配置文件
       upstream finlay.com{server 192.168.12.1:8080 weight=1;server 192.168.12.1:8081 weight=1;}#gzip  on;server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://finlay.com;proxy_redirect default;}
      
  3. spring boot应用加入session依赖
    加入了这个依赖,spring boot应用程序自动 session数据保存到redis的数据库中。

     <dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
    </dependency>
    
  4. 配置controller并且去掉https

    • 配置controller,在controller中向session保存信息之后从session读取信息。
          @Value("${server.port}")private String port;@PostMapping("/save")@ResponseBodypublic String saveName(String name, HttpSession session) {session.setAttribute("name", name);return port;}@GetMapping("get")@ResponseBodypublic String getName(HttpSession session) {return port + ":" + session.getAttribute("name").toString();}
      
    • https配置去掉,因为暂时nginx没有配置https
      #server.ssl.key-store=classpath:/key/httpskey.p12
      #server.ssl.key-alias=hellohttps
      #server.ssl.key-store-password=123456
      
    • 分别启动80808081两个端口,模拟两个server,进行负载均衡处理server
      java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8080
      java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8081
      
  5. 使用postmannginx服务器进行模拟发送post请求和get请求。

    • 发送post请求,对session上设置nameattribute。从结果是8080端口来看, 这里是通过8080端口的服务器进行session情报的保存。
      在这里插入图片描述

    • 发送get请求,对session上设置nameattribute`。
      在这里插入图片描述

      可以看到当nginx将请求postsave请求上对session进行设置后,8081端口的上get请求,能够马上去的到同样的值,保证服务器端的前置负载均衡器将请求重定向到另一个服务器,取得到的session情报一致。

2. JPA实现自动RESTful

  1. 这里使用postgresql进行实验,对数据源进行配置。

    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/springboot
    spring.datasource.username=finlay
    spring.datasource.password=123456
    spring.jpa.database=postgresql
    spring.jpa.properties.show-sql=true
    spring.jpa.properties.hibernate.hbm2ddl.auto=update
    spring.datasource.driver-class-name=org.postgresql.Driver
    spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
    
  2. 同样引入必要的依赖

     <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.9</version></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope>
    </dependency>
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    

    注意这里加入了spring-boot-starter-data-rest,可以在后面看到,这里不需要 在定义自己的controller代码,spring-boot-starter-data-rest可以自动生成自己的RESTful方法

  3. JpaRepository提供的默认方法
    JpaRepository本身提供了好多方法。尝试查看下代码。

    @NoRepositoryBean
    public interface JpaRepository<T, ID> extends ListCrudRepository<T, ID>, ListPagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {void flush();<S extends T> S saveAndFlush(S entity);<S extends T> List<S> saveAllAndFlush(Iterable<S> entities);/** @deprecated */@Deprecateddefault void deleteInBatch(Iterable<T> entities) {this.deleteAllInBatch(entities);}void deleteAllInBatch(Iterable<T> entities);void deleteAllByIdInBatch(Iterable<ID> ids);void deleteAllInBatch();
    
  4. 定义Entity类和创建BookReposity

    • 定义EntityBook
      @Data
      @Entity(name = "book")
      public class Book{@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer id;private String name;private String author;
      }
      
    • 继承JpaRepository<T, ID>,生成自己的interface
      	public interface BookDao extends JpaRepository<Book,Integer> {}
      

    其余的代码需不需要,spring boot会自动生成books (默认的,book表名加上s),作为默认的RESTful API的path

  5. 利用postman进行访问

    • 利用post books进行请求,保存bookEntity对象。
      在这里插入图片描述
    • 查看数据库的保存情况。在这里插入图片描述
    • 看到增加的Entityspring boot也给出了访问的url,进一步使用GET进行访问。
      在这里插入图片描述
    • books发出POST请求,findAll所有的记录。
      在这里插入图片描述
    • book特定id发出PUT请求,修改该记录。
      在这里插入图片描述
    • 对于上面的默认path(url)可以进行修改
    • 修改整个集合的path配置。
      • path
      • collectionResourceRel
      • itemResourceRel
      @RepositoryRestResource(path = "my_books",collectionResourceRel = "my_books",itemResourceRel = "my_book")
      public interface BookDao extends JpaRepository<Book, Integer> {
      }
      
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUU CODE REVIEW 11 代码审计之反序列化知识

打开靶场&#xff0c;得到的是一段代码。 通过分析上面代码可以构造下面代码&#xff0c;获取到序列化之后的obj。 <?php class BUU {public $correct "";public $input "";public function __destruct() {try {$this->correct base64_encode(u…

一文get懂kwai短视频助力巴西博弈slots游戏广告优势

一文get懂kwai短视频助力巴西博弈slots游戏广告优势 在数字化时代&#xff0c;短视频广告凭借其独特的魅力和高效的传播方式&#xff0c;成为了各大品牌进行营销推广的重要手段。特别是在巴西这个充满活力的国家&#xff0c;kwai短视频广告以其独特的方式&#xff0c;为博弈游…

电子技术基础(模电部分)笔记

终于整理出来了&#xff0c;可以安心复习大物线代了&#xff01;&#xff01; 数电部分预计7.10出

自动雪深传感器的类型

TH-XL2随着科技的飞速发展&#xff0c;气象监测技术也在不断进步。在降雪天气频发的冬季&#xff0c;雪深数据对于保障道路交通、农业生产和电力供应等具有至关重要的作用。自动雪深传感器作为气象监测的重要工具&#xff0c;其类型多样、功能各异&#xff0c;为气象数据的准确…

Android开发系列(十二)Jetpack Compose之BottomSheet

BottomSheet 是 Android 中一个常用的 UI 组件&#xff0c;它通常用于显示从屏幕底部弹出的用户界面。Jetpack Compose 是 Android 中的一个全新 UI 工具包&#xff0c;它提供了一种声明式的方式来构建用户界面。Jetpack Compose 中也有一个名为 BottomSheet 的组件&#xff0c…

基于STM32的智能门锁控制系统

目录 引言环境准备智能门锁控制系统基础代码实现&#xff1a;实现智能门锁控制系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;门锁管理与优化问题解决方案与优化收尾与总结 1. 引言 智能门锁控制系统通过使用STM32嵌…

NewspaceGPT带你玩系列之登录页

目录 注册一个账号&#xff0c;用qq邮箱&#xff0c;然后登录选一个可用的Plus&#xff0c;不要选3.5探索GPT今天的主角是HubSpot的登录页创建者问答继续问&#xff1a;答继续交流答看看结果&#xff0c;我有点崩溃重新简单来一次试试&#xff0c;下面开始一个新的登录页请求问…

昇思25天学习打卡营第5天|网络与模型相关要素探讨

目录 从 MindSpore 模块中导入nn和ops 定义模型类 模型层 nn.Flatten nn.Dense nn.ReLU nn.SequentialCell nn.Softmax 模型参数 从 MindSpore 模块中导入nn和ops 将 MindSpore 整个模块引入到当前的 Python 脚本里&#xff0c;方便后续运用 MindSpore 所提供的各类功能…

基于python的房价多元线性回归分析

1.导入必要的库 import pandas as pd import numpy as np import statsmodels.api as sm from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score import matplotlib.pyplot as plt # 忽略Matplotlib的警告&#xff08;可选&…

GP37-S-N、GP37-S-E、GP37-S-R比例电磁铁驱动放大器

比例阀用电磁铁EP45-C、EP37-E、EP45-G、EP45-N、GP37-3-A、GP37-S-N、GP37-S-E、GP37-S-R在直流12V/24V的电液比例控制系统中与BEUEC比例控制放大器配套使用&#xff0c;共同作用于比例阀的控制。电磁铁输出力通过负载弹簧转换成位移&#xff0c;实现电流-力-位移线性转换&…

.NET 矩阵6月红队工具和资源集合

01外网入口打点 1.1 Sharp4WbemScripting 1.2 ASP4Eval 1.3 Sharp4Web.config 1.4 Sharp4AddScript 02安全防御绕过 2.1 Sharp4DefenderStop 03搭建代理隧道 3.1 Sharp4suo5 04混淆加密防护 4.1 Obfuscar混淆器 4.2 Sharp4BatchGuard 05安全技术文档 5.1 .NET 通过Junction Fol…

基于flask的闪现、g对象、蓝图

【 一 】闪现&#xff08;flash&#xff09; # 1 flask中得闪现存放数据的地方&#xff0c;一旦取了&#xff0c;数据就没了-实现跨请求间传递数据 # 2 django中有没有类似的东西&#xff1f;message 消息框架# 3 基本使用1 设置&#xff1a;flash(欢迎你、欢迎来到澳门赌场&a…

AI绘画Stable Diffusion 高清放大,多种方法详解,建议收藏!

&#x1f463; 本章概述 在Stable Diffusion我们想要得到一张高分辨率且具有细节特征的图片时&#xff0c;我们就需要使用一些图片放大算法来帮助我们实现。 本文主要概述在sd中常常使用的高清修复方法以及不同方法的区别和应用场景。同时也给出一些推荐的工作流&#xff0c;你…

理解MySQL核心技术:外键的概念作用和应用实例

引言 在数据库管理系统&#xff08;DBMS&#xff09;中&#xff0c;外键&#xff08;Foreign Key&#xff09;是维持数据一致性和实现数据完整性的重要工具。本文将详细介绍MySQL外键的基本概念、作用&#xff0c;以及相关的操作指南和应用实例&#xff0c;帮助读者掌握并灵活…

YOLOv8的5种不同部署方式推理速度对比:Pytorch、ONNX、OpenVINO-FP32、OpenVINO-int8、TensorRT

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

FatFs(文件系统)

1官网 FatFs - 通用 FAT 文件系统模块 (elm-chan.org) FatFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。FatFs 模块是按照 ANSI C &#xff08;C89&#xff09; 编写的&#xff0c;并且与磁盘 I/O 层完全分离。因此&#xff0c;它独立于平台。它可以集成到资源有限…

华为智能驾驶方案剖析

华为ADS智驾方案始终坚持激光雷达毫米波雷达摄像头的多传感器融合路线&#xff0c;行业降本压力下硬件配置从超配逐步转向贴合实际需求&#xff0c;带动整体硬件成本下降。 1)单车传感器数量呈现下降趋势&#xff0c;包括激光雷达从3个减配至1个、毫米波雷达从6R减配至3R、摄像…

【硬件开发】安规电容X电容和Y电容

为什么有安规电容 国家为了保护人民的安全要求&#xff0c;电容器失效后&#xff0c;不会导致电击&#xff0c;不危及人身安全的安全电容器 安规电容的作用 滤除雷电冲击波&#xff0c;以及插拔插座的高频噪声 X电容 聚酯电容 位置 X电容位于火线和零线之间 作用 滤除…

Swift 中更现代化的调试日志系统趣谈(二)

概述 在上篇 Swift 中更现代化的调试日志系统趣谈(一) 博文中,我们初步讨论了如何利用 Swift OSLog 框架中的 Logger 日志记录器替代“简陋”的 print 方法来记录我们的调试消息。 而接下来我们会再接再厉,继续调试日志系统的进一步介绍。 在本篇博文中,您将学到如下内容…

timm中模型更换huggingface模型链接

现在timm默认使用huggingface的链接了&#xff0c;错误链接如下&#xff1a; (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /timm/swinv2_tiny_window8_256.ms_in1k/resolve/main/model.safetensors (Caused by C…