异步实现
两个注解
@Async @EnableAsync
@Transactional的使用
避免 Spring 的 AOP 的自调用问题
在 Spring 的 AOP 代理下,只有目标方法由外部调用,目标方法才由 Spring 生成的代理对象来管理,这会造成自调用问题。若同一类中的其他没有@Transactional 注解的方法内部调用有@Transactional 注解的方法,有@Transactional 注解的方法的事务被忽略,不会发生回滚。
详细可参考:https://www.ibm.com/developerworks/cn/java/j-master-spring-transactional-use/index.html
@RequestParam
- 三个参数
- value值:get/post请求携带的参数名字
- defaultValue:参数的默认值
- required:参数是否必须,true:为必传参数、false:参数可以不传,默认值为null
- 三种形式
- @RequestParam(value = “id”, required = true/false) String id:显示设置required的默认值
- @RequestParam(value = “id”) String id:不设置required,默认值为true
- String id: 不带@RequestParam注解,与@RequestParam(value = “id”, required = false)效果相同
springProfile和springProperty
springProfile标签 :可以为不同的环境使用不同的配置
// 读取spring.profiles.active的值
<springProfile name="rd" />
<springProfile name="qa" />
<springProfile name="online" >
springProperty标签:可以读取application.properties中的变量值
<!-- 配置参数log_dir读取application.properties中的log.dir属性,如果没有配置,默认是只logs -->
<springProperty name="log_dir" source="log.dir" defaultValue="logs" />
@PostConstruct
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行;通常我们会是在Spring框架中使用@PostConstruct注解做一些初始化的工作
该注解的方法在整个Bean初始化中的执行顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)