Spring Data Jpa 使用乐观锁

1.简介

对于企业应用程序,正确的对数据库并发访问至关重要。这意味着我们应该能够以有效且防错的方式处理多个事务。

此外,我们需要确保并发读取和更新之间的数据保持一致。

为此,我们可以使用Java Persistence API提供的乐观锁定机制。这导致在同一时间对同一数据进行的多次更新不会相互干扰。

查看更多

JVM如何工作--JVM体系结构?

JVM概念

JVM(Java Virtual Machine)是运行Java应用程序的运行时引擎,运行在操作系统之上的,它与硬件没有直接的交互。JVM是JRE(Java Runtime Environment)的一部分。

Java应用程序被称为WORA(Write Once Run Anywhere)。这意味着程序员可以在一个系统上编写Java代码,然后在任何其他系统上运行,无需进行任何调整。

我们都知道Java源文件,通过编译器,能够生产相应的.Class文件,也就是字节码文件,而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码。

  1. Java 源文件—->编译器—->字节码文件
  2. 字节码文件—->JVM—->机器码

每种平台的解释器是不同的,但实现的虚拟机是相同的,这也是Java为什么能够跨平台的原因。

查看更多

spring电子书

  1. 精通spring - Mastering Spring.pdf

  2. 罗时飞.精通spring.pdf

  3. SPRING开发指南.pdf

  4. spring框架,技术详解及使用指导.pdf

  5. Spring 3.x企业应用开发实战[完整版+书签].pdf

  6. 精通Spring:Java轻量级架构开发实践.孟劼.高清文字版.pdf

  7. Spring基础教程.pdf

  8. Spring3_权威开发指南.pdf

  9. SpringBoot实战第4版清晰版.pdf

  10. 3.gRPC 在 Spring Cloud 中的应用.pdf

  11. SpringBoot实战第4版清晰版.pdf

获取方式: 关注【Java提升营】,回复书籍获取。

算法和设计模式电子书

  1. 设计模式:Java语言中的应用.pdf

  2. 大话设计模式(带目录完整版).pdf

  3. 数据结构与算法(JAVA语言版)-中文.pdf

  4. 研磨设计模式.pdf

  5. 算法(第四版).pdf

  6. Head First 设计模式.pdf

  7. Java数据结构和算法.(第二版).pdf

  8. 统一建模语言(UML)参考手册——基本概念.pdf

  9. 数据结构与算法分析C++描述.pdf

  10. 算法图解 - [美] Aditya Bhargava

  11. 《设计模式》中文版.pdf

  12. 《面向模式的软件体系结构 卷2:用于并发和网络化对象的模式》.pdf

  13. 算法设计与分析_算法导论(中文版第二版).pdf

  14. 集体智慧编程-python算法应用.pdf

获取方式: 关注【Java提升营】,回复书籍获取。

java电子书

  1. Java高手真经(编程基础卷):Java核心编程技术.pdf

  2. Java2核心技术II卷.高级特性7th.pdf

  3. Java极限编程.pdf

  4. JAVA网络编程第3版.pdf

  5. Java2网络协议技术内幕.pdf

  6. Head First Java 中文高清版.pdf

  7. JAVA优化编程.pdf

  8. JDK1.5的泛型实现.pdf

  9. 深入剖析Tomcat.pdf

  10. JAVA并发编程实践.pdf

  11. Java解惑(中文).pdf

  12. 重构-改善既有代码的设计.pdf

  13. Java并发程序设计教程.pdf

  14. 分布式系统原理与范型.pdf

  15. J2EE核心模式.pdf

  16. Java语言编码规范.PDF

  17. Java网络编程精解.pdf

  18. Java深度历险.pdf

  19. Java案例开发.pdf

  20. Java线程.pdf

获取方式: 关注【Java提升营】,回复书籍获取。

技术电子书汇总

Nginx配置详解

Nginx Config File

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
upstream backend
{
server 127.0.0.1:8443; #设置代理地址
#keepalive 16; #启动后端长连接
}

server {
listen 80;
server_name domain1 domain2;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl; #监听端口
server_name domain1 domain2; #监听地址,域名可以有多个,用空格隔开,一般填写域名、IP,可配置阻止其他server_name访问

#配置ssl
ssl_certificate ssl/*.crt;
ssl_certificate_key ssl/*.key;

root html; #根目录
index index.php index.htm index.html; #默认页
#动态请求代理给相应服务器
location / {
#include agent_deny.conf; #屏蔽爬虫攻击,需要外部配置,默认关闭,配置好外部配置打开
#limit_req zone=ConnLimitZone burst=1 nodelay; #设置限速1个排队
#limit_conn TotalConnLimitZone 100; #限制每个IP只能发起100个并发连接
proxy_set_header Host $host:$server_port; #修改Host头为用户真实Host,不修改这会统一发送代理服务器的Host,后端服务会认为都是代理服务器发送的请求。
proxy_set_header X-Real-IP $remote_addr; #使后端服务拿到用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取用户真实IP地址
proxy_redirect off; #作用是对发送给客户端的URL进行修改!off设置为关闭此功能http://$host:8200/ http://$http_host/;
proxy_http_version 1.1; #设置Http协议版本
proxy_pass http://backend; #转向定义服务列表,如果只做代理可以直接设置为http://127.0.0.1:10000
}

#S3配置
location ^~ /s3-configuration/ {
alias /app/s3-configuration/;
}


#缓存相应的文件(静态文件)
location ~ \.(gif|jpg|jpeg|png|htm|html|css|js|flv|ico|swf|mp3)(.*) {
#include agent_deny.conf; #屏蔽爬虫攻击,需要外部配置,默认关闭,配置好外部配置打开
#limit_req zone=ConnLimitZone burst=1 nodelay; #设置限速1个排队
#limit_conn TotalConnLimitZone 100; #限制每个IP只能发起100个并发连接
proxy_set_header Host $host:$server_port; #修改Host头为用户真实Host,不修改这会统一发送代理服务器的Host,后端服务会认为都是代理服务器发送的请求。
proxy_set_header X-Real-IP $remote_addr; #使后端服务拿到用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#获取用户真实IP
#proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; #强制缓存,部分应用会不让静态页面缓存,此方法可以强制缓存静态页,默认关闭
proxy_redirect off; #作用是对发送给客户端的URL进行修改!off设置为关闭此功能http://$host:8200/ http://$http_host/;
proxy_http_version 1.1; #设置Http协议版本
proxy_pass http://backend; #转向定义服务列表,如果只做代理可以直接设置为http://127.0.0.1:10000
proxy_cache cache_one; #设置缓存共享内存区块,也就是keys_zone名称
proxy_cache_valid 200 302 1h; #对不同的HTTP状态码设置不同的缓存时间,h小时,d天数
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 7d; #设置用户浏览器缓存文件失期时间,设置为-1时浏览器不进行缓存
}
}

agent_deny.conf

1
2
3
4
if ($http_user_agent ~ "COOCAREHTTPULPADAGENT|WinHttp|WebZIP|FetchURL|node-superagent|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|python-requests|HeadlessChrome|^$" ) {
return 403;
# access_log off; #此类消息不加入日志
}

Spring IOC容器源码:BeanFactory简介

Spring 最重要的概念是 IOCAOP,我将用几篇文章带领大家来分析下 SpringIOC容器AOP 。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读这些文并不能让你成为Spring专家,不过一定有助于大家理解Spring的很多概念,帮助大家排查应用中和Spring相关的一些问题。为了降低难度,所有的内容都是基于 xml 的配置的方式。

查看更多