-
SpringBoot提供了非常方便使用的定时任务功能。同时也支持Quartz。
开启任务调度器@Configuration
@EnableScheduling
public class SchedulerConfig {
}
使用定时任务// 每5秒执行一次
@Scheduled(fixedDelay = 5000)
public void doSomething() {
// something that should run periodically
}
// cron...
-
MyBatis有一级缓存和二级缓存。一级缓存默认开启,二级缓存默认关闭。
一级缓存基于SqlSession,只要是同一个SqlSession,执行相同的SQL语句会返回缓存中的结果,从而减少数据库访问次数。需要注意的是,如果使用了延迟加载,则会出现无法使用一级缓存的情况,即使查询同一个对象也会多次查库。为避免这种情况,要谨慎使...
-
常用格式
APNG。后缀:.apng,MIME type:image/apng。动态图,比gif性能好,但不如webpge格式。过渡格式。Java不支持。浏览器支持: Chrome, Edge, Firefox, Opera, Safari。AVIF。后缀:.avif,MIME type:image/avif。静态图、动态图,表现都很好。不够流行,浏览器支持不好。Java不支持。浏览器支持: Chrome, Opera, ...
-
SpringDoc是用于生成SpringBoot项目API文档的Java库。在代码中使用swagger-api注解,即可生成相应的API文档,和JavaDoc非常类似。
SpringDoc基于Swagger 3,Swagger 3包名为io.swagger.core.v3。
Swagger 3实现了OpenAPI 3接口规范,类似Hibernate实现JPA规范。Swagger 3提供了API注解,还提供了Swagger-ui用于生成API...
-
上一章简单的处理了密码加密问题。但密码加密中有一个更为棘手的问题,这便是加密算法的升级。
如果系统设计之初,还使用md5加密,之后改为了更安全的sha1或sha256,再之后又要改为pbkdf2或bcrypt之类的现代算法。如果又出现更好的加密技术,或者原有加密算法被发现有漏洞,还得继续更改。
这种更改在已上线的系统中是...
-
上一章已经可以使用自定义的登录页面,一切看起来都很好,但是用户名密码并不是自己的。如何做到使用自己数据库里的用户名和密码呢?
UserDetailsService接口使用数据库的用户名密码,需要实现UserDetailsService。配置如下:
@Bean
public UserDetailsService userDetailsService() {
return new Us...
-
看到上一章的登录页面,大部分人的第一反应就是,我要用自己的登录页面怎么办?
之前全部使用SpringBoot的默认配置,现在开始需要增加自己的配置项了。
配置自定义登录地址定义自己的SecurityFilterChain,SpringBoot自动配置的SecurityFilterChain将会自动失效。
@Bean
public SecurityFilterChain security...
-
pom.xml中加入以下代码,就已经有了Spring Security的权限功能了,甚至包括登录页面。简直是保姆式的呵护。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</versi...
-
Spring Security学习曲线比较陡峭,因为权限本身就非常复杂,涉及到很多概念。Spring Security要比Shiro难,因为Spring Security提供的功能更多,而Shiro很多功能需要自己实现。要灵活使用Spring Security提供的功能,以及在Spring Security复杂的体系里进行扩展,则需要对Spring Security进行深入了解,否则会一筹莫展、...
-
Liquibase是开源的数据库表结构管理解决方案,可以轻管理表结构的变更。
众所周知,使用git管理代码可以使得多人协作、版本管理等工作变得异常轻松。但数据库表结构的管理却一直没有很好的解决方案,比如每次变更数据库都要手动执行SQL脚本,不同版本的程序和不同版本的数据库表结构要小心的匹配,跨数据库平台的还需为...