Skip to content

Commit b1a39c6

Browse files
committed
隐藏部分付费内容
1 parent 7ba1f4f commit b1a39c6

12 files changed

+36
-368
lines changed

docs/gongju/knife4j.md

+3-27
Original file line numberDiff line numberDiff line change
@@ -228,35 +228,11 @@ Swagger 是没有搜索功能的,当要测试的接口有很多的时候,当
228228
229229
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/gongju/knife4j-15.png)
230230

231-
如果项目中之前使用过 Swagger 生成接口文档,切换到 Knife4j 可以说是非常的丝滑,只需要两步:
231+
----
232232

233-
- 在 pom.xml 文件中把 `springfox-boot-starter` 替换为 `knife4j-spring-boot-starter`
234-
- 访问地址由原来的 `http://${host}:${port}/swagger-ui.html` 切换到 `http://${host}:${port}/doc.html`,如果有权限限制的话,记得开白名单。比如说,编程喵整合了 SpringSecurity,所以需要在 application.yml 文件中放开 Swagger 和 Knife4j 的访问后缀。
233+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的。
235234

236-
237-
```
238-
# 自定义类 ignoreConfig,URL 的白名单
239-
secure:
240-
ignored:
241-
urls: #安全路径白名单
242-
- /doc.html
243-
- /swagger-ui/**
244-
- /swagger/**
245-
- /swagger-resources/**
246-
- /**/v3/api-docs
247-
- /**/*.js
248-
- /**/*.css
249-
- /**/*.png
250-
- /**/*.ico
251-
- /webjars/springfox-swagger-ui/**
252-
- /actuator/**
253-
- /druid/**
254-
- /users/login
255-
- /users/register
256-
- /users/info
257-
- /users/logout
258-
- /minio/upload
259-
```
235+
----
260236

261237
### 源码路径
262238

docs/kaiyuan/auto-generator.md

+3-64
Original file line numberDiff line numberDiff line change
@@ -309,72 +309,11 @@ pc.setParent("top.codingmore.mpg");
309309
310310
完整代码如下所示:
311311

312-
```java
313-
package top.codingmore.generator;
314-
315-
import com.baomidou.mybatisplus.annotation.IdType;
316-
import com.baomidou.mybatisplus.generator.AutoGenerator;
317-
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
318-
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
319-
import com.baomidou.mybatisplus.generator.config.PackageConfig;
320-
import com.baomidou.mybatisplus.generator.config.rules.DateType;
321-
322-
/**
323-
* 微信搜索「沉默王二」,回复 Java
324-
*
325-
* @author 沉默王二
326-
* @date 5/17/22
327-
*/
328-
public class CodeGenerator {
329-
public static void main(String[] args) {
330-
// 代码生成器
331-
AutoGenerator mpg = new AutoGenerator();
332-
333-
// 全局配置
334-
GlobalConfig gc = new GlobalConfig();
335-
String projectPath = System.getProperty("user.dir");
336-
gc.setOutputDir(projectPath + "/src/main/java");
337-
gc.setAuthor("沉默王二");
338-
gc.setOpen(false);
339-
gc.setDateType(DateType.ONLY_DATE);
340-
gc.setSwagger2(true);
341-
gc.setIdType(IdType.AUTO);
342-
gc.setBaseColumnList(true);
343-
gc.setBaseResultMap(true);
344-
gc.setFileOverride(true);
345-
346-
mpg.setGlobalConfig(gc);
347-
348-
// 数据源配置
349-
DataSourceConfig dsc = new DataSourceConfig();
350-
dsc.setUrl("jdbc:mysql://localhost:3306/codingmore?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
351-
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
352-
dsc.setUsername("root");
353-
dsc.setPassword("Huicheng123");
354-
355-
mpg.setDataSource(dsc);
356-
357-
// 包配置
358-
PackageConfig pc = new PackageConfig();
359-
pc.setParent("top.codingmore.mpg");
360-
mpg.setPackageInfo(pc);
361-
362-
mpg.execute();
363-
}
364-
}
365-
```
366-
367-
再来看一下运行后的效果,可以看到数据库表对应的 controller、service、entity、mapper 等等全有了——爽歪歪:
368-
369-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-1.gif)
370-
371-
### 总结对比
372-
373-
对比 Mybatis 的 Generator 和 MyBatis-Plus 的 AutoGenerator,就可以得出这样一条结论:后者的配置更简单,开发效率也更高,功能也更强大——可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码。
312+
----
374313

375-
**MyBatis-Plus 的确配得上 Plus 啊,确实优秀**
314+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的
376315

377-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/kaiyuan/auto-generator-9.png)
316+
----
378317

379318
### 源码地址:
380319

docs/redis/redis-springboot.md

+3-49
Original file line numberDiff line numberDiff line change
@@ -645,57 +645,11 @@ public class RedisServiceImpl implements RedisService {
645645

646646
**第三步**,在标签 PostTagController 中增加 Redis 测试用接口 simpleTest :
647647

648-
```java
649-
@Controller
650-
@Api(tags = "标签")
651-
@RequestMapping("/postTag")
652-
public class PostTagController {
653-
@Autowired
654-
private IPostTagService postTagService;
655-
@Autowired
656-
private IPostTagRelationService postTagRelationService;
657-
658-
@Autowired
659-
private RedisService redisService;
660-
661-
@RequestMapping(value = "/simpleTest", method = RequestMethod.POST)
662-
@ResponseBody
663-
@ApiOperation("修改标签/Redis 测试用")
664-
public ResultObject<PostTag> simpleTest(@Valid PostTagParam postAddTagParam) {
665-
if (postAddTagParam.getPostTagId() == null) {
666-
return ResultObject.failed("标签id不能为空");
667-
}
668-
PostTag postTag = postTagService.getById(postAddTagParam.getPostTagId());
669-
if (postTag == null) {
670-
return ResultObject.failed("标签不存在");
671-
}
672-
QueryWrapper<PostTag> queryWrapper = new QueryWrapper<>();
673-
queryWrapper.eq("description", postAddTagParam.getDescription());
674-
int count = postTagService.count(queryWrapper);
675-
if (count > 0) {
676-
return ResultObject.failed("标签名称已存在");
677-
}
678-
BeanUtils.copyProperties(postAddTagParam, postTag);
679-
680-
boolean successFlag = postTagService.updateById(postTag);
681-
682-
String key = "redis:simple:" + postTag.getPostTagId();
683-
redisService.set(key, postTag);
684-
685-
PostTag cachePostTag = (PostTag) redisService.get(key);
686-
return ResultObject.success(cachePostTag);
687-
}
688-
689-
}
690-
```
691-
692-
**第四步**,重启服务,使用 [Knife4j](https://mp.weixin.qq.com/s/gWPCg6TP3G_-I-eqA6EJmA) 测试该接口 :
693-
694-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/redis/redis-springboot-b74b8efe-4ef8-4395-9892-692272593b68.png)
648+
----
695649

696-
然后通过 Red 查看该缓存,OK,确认我们的代码是可以完美执行的
650+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的
697651

698-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/redis/redis-springboot-6b3979b7-37be-4c0a-b6fa-7701850ea0a1.png)
652+
----
699653

700654

701655

docs/springboot/Filter-Interceptor-Listener.md

+3-29
Original file line numberDiff line numberDiff line change
@@ -261,37 +261,11 @@ public class WebLogAspect {
261261

262262
根据监听对象可以把监听器分为 3 类:
263263

264-
- ServletContext:对应应用 application,整个 Web 服务器中只有一个,Web 服务器关闭时销毁。可用于数据缓存,例如结合redis,在Web服务创建时从数据库拉取数据到缓存服务器。
265-
- HttpSession: 对应会话 session,在会话建立时创建,一端会话关闭时销毁。可用于获取在线用户数量。
266-
- ServletRequest:对应 request,客户端发送请求时创建,一同创建的还有 response,用于封装请求数据,在一次请求处理完成时销毁。可用于封装用户信息。
264+
----
267265

268-
新建一个 MyListener:
266+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的。
269267

270-
```java
271-
@WebListener
272-
public class MyListener implements ServletContextListener {
273-
@Override
274-
public void contextInitialized(ServletContextEvent sce) {
275-
System.out.println("上下文创建");
276-
}
277-
278-
@Override
279-
public void contextDestroyed(ServletContextEvent sce) {
280-
System.out.println("上下文销毁");
281-
}
282-
}
283-
```
284-
285-
@WebListener 注解用于将一个类声明为监听器,同样干掉了 web.xml 文件。
286-
287-
ServletContextListener 能够监听整个 Web 应用程序的生命周期。当 Web 应用启动时触发 contextInitialized 方法,关闭时触发 contextDestroyed 方法。
288-
289-
在 Intellij IDEA 中重启服务的时候,可以在控制台看到如下信息:
290-
291-
292-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/Filter-Interceptor-Listener-6b1904a7-64dc-44fa-8dde-8e986325ec7e.png)
293-
294-
不过需要注意的是,在 Intellij IDEA 中直接关闭进程无法看到 contextDestroyed 被调用的消息。
268+
----
295269

296270
### 源码路径:
297271

docs/springboot/initializr.md

+3-29
Original file line numberDiff line numberDiff line change
@@ -191,37 +191,11 @@ OK,现在可以访问到了。也就表明我们的第一个 Spring Boot 项
191191

192192
直接修改代码来体验一下吧。我们修改 HelloController 内容为:
193193

194-
```java
195-
@Controller
196-
public class HelloController {
197-
198-
@GetMapping("/hello")
199-
@ResponseBody
200-
public String hello() {
201-
return "hello, springboot,沉默王二是傻X";
202-
}
203-
}
204-
```
205-
206-
由于 Intellij IDEA 是自动保存的,所以默认情况下,Intellij IDEA 的实时编译是关闭的(建议不要打开,否则已修改就编译,挺废内存的),我们需要手动点一下 build 按钮。
207-
208-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/initializr-55098eb9-1809-460d-9d2a-730da24e73c0.png)
209-
210-
很快,控制台就开始滚动日志了。
211-
212-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/initializr-489f64c7-8d1e-4aea-a5c9-bad582991040.png)
213-
214-
我们发现,这次服务重载的时间很短,短到只有 0.372 秒,这就很方便了有没有,不用再去点运行/调试按钮重新跑服务了,重新跑服务是很费时间的,大家可以操作一下试试。
215-
216-
217-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/initializr-377b9d53-0bcd-475d-9774-4135a9019694.png)
218-
219-
再次访问 `http://localhost:8080/hello`,就可以看到返回的内容发生变化了。
220-
194+
----
221195

222-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/initializr-a5924f5c-c41f-49d7-b076-b93d24de37c8.png)
196+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的。
223197

224-
也就是说,热部署生效了。搞定。
198+
----
225199

226200
### 源码路径
227201

docs/springboot/jpa.md

+3-15
Original file line numberDiff line numberDiff line change
@@ -321,23 +321,11 @@ Hibernate: delete from user where id=?
321321

322322
### Spring Data JPA 和 MyBatis 的对比
323323

324-
在以往我参与的项目当中,无一例外都选择的是 MyBatis。国内采用 MyBatis 作为 ORM 框架的要比 Spring Data JPA 多得多。
324+
----
325325

326-
我想原因有这么几个:
326+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的。
327327

328-
1)MyBatis 是针对SQL 的,上手难度比 Spring Data JPA 面向 JPQL 要稍微容易一些。但在 Intellij IDEA 这种集成开发环境的代码提示下,优势并不大。
329-
330-
2)Spring Data JPA 的资料相对少一些,而 MyBatis 的资料可以说非常全面了,遇到问题基本上都能找到解决方案,另外像 MyBatis-Plus 的出现,在一定程度上增强了 MyBatis 的能力。
331-
332-
3)Spring Data JPA 一开始在动态 SQL 能力上不如 MyBatis,但随着 Spring Boot 和 Spring Data JPA 的无缝衔接,Spring Data JPA 的应用会越来越广泛,事实上,国外用 Spring Data JPA 的就比 MyBatis 的多一些。
333-
334-
那在以后的项目当中,我会更加倾向于 Spring Data JPA,原因有这么几点:
335-
336-
1)新项目不用事先设计数据库和表结构,开发过程中可以自动根据实体类生成数据库和表结构,更容易快速迭代。
337-
338-
2)能减少切换数据库带来的改造成本,因为 Spring Data JPA 底层屏蔽了 ORM 框架的差异性;再者不用写原生 SQL 的话,也屏蔽了数据库之间的 SQL 差异性。
339-
340-
3)持久层的代码量更少,维护起来更加简单和方便,更多的时候,只需要维护 entity 和 Respository 接口之间的映射关系就可以了。
328+
----
341329

342330
### 源码地址:
343331

docs/springboot/logback.md

+3-30
Original file line numberDiff line numberDiff line change
@@ -286,38 +286,11 @@ class CodingmoreLogbackApplicationTests {
286286
}
287287
```
288288

289-
运行该测试方法,可以在控制台看到如下日志:
289+
----
290290

291+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的。
291292

292-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/logback-2456652a-63f5-4499-8133-ed9c8a68e0e7.png)
293-
294-
日志文件也有:
295-
296-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/logback-f1baaaa3-e6c4-4abb-8cc7-9862e90f960a.png)
297-
298-
查看字节码反编译后的文件就明白了。lombok 在编译的时候会自动添加一行代码:
299-
300-
```java
301-
private static final Logger log = LoggerFactory.getLogger(CodingmoreLogbackApplicationTests.class);
302-
```
303-
304-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/logback-e5eb93b2-906c-4fbf-8fe4-6e6a3c727625.png)
305-
306-
### logback 中文手册
307-
308-
GitHub 上有一份 Logback 的中文手册,总共有 150 多页,主要包含以下基本的和高级的特性:
309-
310-
- logback 的整体架构
311-
- 讨论 logback 最好的实践以及反模式
312-
- logback 的 xml 配置方式
313-
- appender
314-
- encoder
315-
- layout
316-
- filter
317-
- 上下文诊断
318-
- Joran - logback 的配置系统
319-
320-
>[https://github.com/YLongo/logback-chinese-manual](https://github.com/YLongo/logback-chinese-manual)
293+
----
321294

322295

323296
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/logback-cd491159-e48e-4c74-a67f-7962a45e847f.png)

docs/springboot/mysql-druid.md

+3-59
Original file line numberDiff line numberDiff line change
@@ -274,67 +274,11 @@ Spring Boot2.0 以上默认使用的是 Hikari 连接池,我们从之前的日
274274

275275
第二步,在 application.yml 文件中添加 Druid 配置。
276276

277-
```
278-
spring:
279-
datasource:
280-
type: com.alibaba.druid.pool.DruidDataSource
281-
druid:
282-
#初始化连接池大小
283-
initial-size: 5
284-
#配置最小连接数
285-
min-idle: 5
286-
#配置最大连接数
287-
max-active: 200
288-
#配置连接等待超时时间
289-
max-wait: 60000
290-
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
291-
time-between-eviction-runs-millis: 60000
292-
#配置一个连接在池中最小生存的时间,单位是毫秒
293-
min-evictable-idle-time-millis: 300000
294-
#测试连接
295-
validation-query: SELECT 1 FROM DUAL
296-
#申请连接的时候检测,建议配置为true,不影响性能,并且保证安全
297-
test-while-idle: true
298-
#获取连接时执行检测,建议关闭,影响性能
299-
test-on-borrow: false
300-
#归还连接时执行检测,建议关闭,影响性能
301-
test-on-return: false
302-
#是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
303-
pool-prepared-statements: false
304-
#开启poolPreparedStatements后生效
305-
max-pool-prepared-statement-per-connection-size: 20
306-
#配置扩展插件,常用的插件有=>stat:监控统计 log4j:日志 wall:防御sql注入
307-
filters: stat,wall,slf4j
308-
#打开mergeSql功能;慢SQL记录
309-
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
310-
#配置DruidStatFilter
311-
web-stat-filter:
312-
enabled: true
313-
url-pattern: "/*"
314-
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
315-
#配置DruidStatViewServlet
316-
stat-view-servlet:
317-
url-pattern: "/druid/*"
318-
#登录名
319-
login-username: root
320-
#登录密码
321-
login-password: root
322-
```
323-
324-
第三步,重启项目。在日志信息里可以看到 Druid 的初始化信息。
325-
326-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/mysql-druid-06115c50-5741-482f-b5c0-45c55017098f.png)
327-
328-
第四步,通过 `http://localhost:9002/druid/` 地址就可以在浏览器访问 Druid 的监控页面了,用户名和密码是我们在配置文件里指定的 root 和 root,登录后是这样的。
329-
330-
331-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/mysql-druid-daaf401e-e4c4-4057-9b3b-d605eefb6eb3.png)
332-
333-
更多关于监控的配置信息,可以到 Druid 的 GitHub 仓库查看。
277+
----
334278

335-
>[https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98](https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98)
279+
更多内容,只针对《Java 程序员进阶之路》星球用户开放,需要的小伙伴可以[戳链接🔗](docs/zhishixingqiu/)加入我们的星球,一起学习,一起卷。。**编程喵**🐱是一个 Spring Boot+Vue 的前后端分离项目,融合了市面上绝大多数流行的技术要点。通过学习实战项目,你可以将所学的知识通过实践进行检验、你可以拓宽自己的技术边界,你可以掌握一个真正的实战项目是如何从 0 到 1 的。
336280

337-
![](http://cdn.tobebetterjavaer.com/tobebetterjavaer/images/springboot/mysql-druid-a5db84fc-1030-4a38-824d-4e649ad2b768.png)
281+
----
338282

339283
### 源码地址
340284

0 commit comments

Comments
 (0)