czp's blog

Spring-Boot中配置单页应用

环境: Spring Boot 2.1.0.RELEASE

有的时候我们不得不把一个单页应用(例如 react-router)与 Spring-Boot 后端一起打包. 但是这样就会有一个问题, 一旦用户刷新页面, 就会看到一个 404 画面, 因为服务端并没有把请求转向 index.html.

所以我们通过一些配置, 让 Spring 在找不到对应的资源文件的情况下, 将请求统统转向到 index.html, 这样用户就可以前端路由了.

我们很容易想到让 Spring 找不到资源文件时抛出一个异常然后我们配置一个 ControllerAdvice, 于是我们搜到了这么一条配置

spring.mvc.throw-exception-if-no-handler-found=true

Read More

Ubuntu增加最大文件打开数量限制

环境: Ubuntu Desktop 18.04

众所周知, Linux 的文件打开数量限制是用 ulimit -n 命令查看的.

$ ulimit -n 
1024

然后我们就会发现默认只有 1024.

然后我们按照人云亦云的办法, 去修改 /etc/security/limits.conf, 在文件末尾增加如下两行

Read More

Telegram-Bot收不到普通群聊消息的问题

当我们写好一个 Telegram Bot 之后, 把它拉到一个群里, 然后在群里发一条命令, 机器人马上就收到了命令.

但是我们在群里发送一个普通消息(不以 / 开头的消息), 我们发现机器人没有收到这条消息.

我们私聊机器人, 机器人是能收到消息的. 换一个群, 依然收不到普通群聊消息, 但是能收到群里发的命令(命令一定是以 / 开头的).

这个问题是由于 Telegram Botprivacy 设置问题导致的. 详见 https://core.telegram.org/bots#privacy-mode

更改 privacy mode 非常简单, 首先我们联系 BotFather https://telegram.me/BotFather

Read More

Spring-Boot无法加载ClasspathResource问题

环境: Spring Boot 2.0.5.RELEASE

一般来说, 程序运行所必须的资源文件我们会一起打包到 jar. 那么接下去我们就要读取这个资源文件.

假定我们的资源文件在源码目录中为 src/main/resources/myFile.txt

Spring Boot 中读取存放在 classpath 的资源文件通常是这么做的

1
val myFile = ClasspathResource("/myFile.txt")

Read More

正确打包Spring-Boot到war

环境: Spring-Boot 2.0.5.RELEASE | gradle 4.10.2

众所周知, Spring Boot 在开发时之所以能直接启动, 是因为内置了 tomcat. 同时这也使得 Spring Boot 可以直接输出为可执行的 jar 文件.

那么问题来了, 如果我们需要将应用打包为 war 文件并部署到外部的 tomcat 服务器怎么办.

在 Google 搜索这个问题, 就会看到很多人跟你说, 在 gradle 里, 把 tomcat 的依赖 exclude 掉就好了. 但是这样的话, 本地调试就没法直接启动了, 既然 Spring Boot 的设计是完美的, 所以肯定不是这么弄的.

于是我们找到了 Spring Boot 文档 https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable-wars

Read More