spring filter 坑点
加了@ServletComponentScan,无论过滤器类加不加@Componment都可以,单使用@Component会默认过滤/*
@Oder只能在不加@ServletComponentScan 情况下才有效,但是单使用@Component会默认过滤/*,所以@Oder废了
只能单独写配置文件,将Filter配置进来排序(不需要@ServletComponentScan)
使用Spring boot 缓存
@Cacheable(cacheNames = “emp”,key = “#user.admin”,unless="#result == null" )
Key用admin存,第一次在数据库获取数据会存储到缓存中,第二次将密码改了,依旧能获取成功,测试了几遍,他应该是只匹配Key值,
只要Key匹配,他就会判断该数据存在,直接返回缓存中的数据
spring中Constructor、@Autowired、@PostConstruct的顺序
其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象p与对象a,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowired注解,那么@Autowired注入是发生在A的构造方法执行完之后的。
如果想在生成对象时候完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。
Constructor >> @Autowired >> @PostConstruct
spring事物管理(@Transactional),异常事务回滚,try catch捕获不抛出,事物不回滚
默认情况下,spring事务只有在发生未被捕获的 RuntimeException时才回滚(运行时异常)。
注意,不写try catch和写try{} catch (Exception e) { throw new RuntimeException(); }是一样的意思。
解决:
不进行捕获,或捕获抛出RuntimeException;
捕获并手动回滚
try {
// 新增/修改
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//手动回滚
}
一般为了用户体验好,想抛出自定义的异常,会用到第二种解决方法,捕获,然后手动回滚,再抛出自定义的异常
mybatis update 返回值是匹配到的数据 , 并不是所影响的数据
在springmvc中 配置 @RequestMapping(value={“test”, “test1”})
如果你项目端口是8080;然后你要访问这个方法,
你可以通过 http://localhost:8080/test或者http://localhost:8080/test1来访问
getSession(false) :判断有无session,有就返回该session,没有就返回null
getSession(true):判断有无session,有就返回该session,没有就创建
在Java7中,关闭流这种繁琐的操作就不用我们自己写了
只要实现的自动关闭接口(Closeable)的类都可以在try结构体上定义,java会自动帮我们关闭,及时在发生异常的情况下也会。可以在try结构体上定义多个,用分号隔开即可,如:
try (OutputStream out = new FileOutputStream("");OutputStream out2 = new FileOutputStream("")){
// ...操作流代码
} catch (Exception e) {
throw e;
}