spring
Spring RedisTemplate Scan
keys 不能用, 那就只能用scan了public static Set<String> scan(RedisTemplate<String, String> redisTemplate, String pattern) {
return redisTemplate.execute((Re
Shiro与SpringAOP冲突导致无法请求到Controller
各依赖版本org.crazycake:shiro-redis-spring-boot-starter:3.2.1org.springframework.boot:spring-boot-starter-aop:2.3.0.RELEASE有个配置如下@Bean
public static Defaul
Spring的cglib代理类无法取到被代理类的成员属性
cglib的原理是生成一个被代理类的子类进行增强, 那么为什么子类访问不到父类的属性呢@Service
public class AopTestService {
public String value = "hello world";
@Transactional
pu
Spring循环依赖与三级缓存
常见的循环依赖@Component
public class Aoo {
@Autowired
Boo boo;
}
@Component
public class Boo {
@Autowired
Aoo aoo;
}
A依赖B B依赖A首先判断三级缓存中存不存在
观察者模式与SpringBoot应用
当对象间存在一对多关系时, 则使用观察者模式(Observer Pattern). 比如, 当一个对象被修改时, 则会自动通知依赖它的对象.优点:观察者和被观察者是抽象耦合的建立一套触发机制SpringBoot应用场景在SpringBoot启动流程中org.springframework.boot.
Cron 表达式 星期建议使用 MON 等单词缩写
在spring提供的定时任务框架中@Scheduled(cron = "0 0 16 ? * 1")
1指周一但, 其他cron工具中, 1指周日区别就在于, spring的一周从周一开始, 而其他工具从周日开始判断可能是spring对时区做了判断, 动态切换但暂未验证而使用 MON 表示 周一,
Spring自定义注解加载和使用
Spring在扫描类信息的使用只会判断被@Component注解的类所以任何自定义的注解只要带上@Component(当然还要有String value() default "";的方法,因为Spring的Bean都是有beanName唯一标示的)都可以被Spring扫描到,并注入容器内例: Spr
AOP拦截controller方法注入参数 代替@RequestBody
效果如下加上@Pass放弃aop拦截注入,使用spring mvc的参数注入核心方法package com.github.aop;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxm
@Transactional可在抽象类上定义,且能生效
定义一个抽象类
import com.shopping.base.repository.sync.ipos.coupon.IposCzklbRepository;
import org.springframework.beans.factory.annotation.Autowired;
impor
多数据源 单库操作事务不回滚
项目配置了多数据源,之前操作主数据源,直接加上@Transactional(rollbackFor = Exception.class),没有任何问题最近操作其他数据源并做测试的时候,发现int i = 1 / 0并不会回滚,各种排查,从数据库引擎到注解@Transactional使用规范和异常处理
手写Spring、SpringMVC
目前实现了以下注解@Autowired 从容器中自动注入@Bean 标记方法返回值加入容器管理@Component 标记此类加入容器管理@RestController 标记此类为Rest风格的控制器 结果默认转为json@RequestMapping 前置匹配路径@GetMapping 匹配一个Ge
基于自定义注解手写权限控制
方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-w
SpringDataRedis 常用操作
//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);
//根据key获取缓存中的val
stringRedisTemplate.opsForValue().