application.yml
给某一个类装配属性
类
@Data
@Component
@ConfigurationProperties(prefix="person")
public class Person{
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
}
application.yml
person:
name: pakhm
age: 3
happy: true
birth: 2019/11/02
maps: {k1:v1,k2:v2}
list:
- code
- music
- girl
dog:
name: aa
age: 1
JSR303校验
对某个类的属性值进行校验
多环境配置
假设resource目录下有application.yml,application-dev.yml,application-test.yml
application.yml
spring:
profiles:
active: dev //走dev
监听器
监听 Servlet 上下文对象
场景
监听 Servlet 上下文对象可以用来初始化数据,用于缓存。什么意思呢?我举一个很常见的场景,比如用户在点击某个站点的首页时,一般都会展现出首页的一些信息,而这些信息基本上或者大部分时间都保持不变,但这些信息都是来自数据库。如果用户的每次点击,都要从数据库中去获取数据的话,用户量少还可以接受,如果用户量非常大的话,这对数据库也是一笔很大的开销。
针对这种首页数据,如果大部分都不常更新的话,我们完全可以把它们缓存起来,每次用户点击的时候,我们都直接从缓存中拿,这样既可以提高首页的访问速度,又可以降低服务器的压力。如果做得更加灵活一点,可以再加个定时器,定期的来更新这个首页缓存。就类似与 CSDN 个人博客首页中排名的变化一样。
代码实现
@Service
@Service
public class UserService {
/**
* 获取用户信息
* @return
*/
public User getUser() {
// 实际中会根据具体的业务场景,从数据库中查询对应的信息
return new User(1L, "pakhm", "123456");
}
}
监听器
/**
* 使用 ApplicationListener 来初始化一些数据到 application 域中的监听器
*/
@Component
public class MyServletContextListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
// 先获取到 application 上下文
ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();
// 获取对应的 service
UserService userService = applicationContext.getBean(UserService.class);
User user = userService.getUser();
// 获取 application 域对象,将查到的信息放到 application 域中
ServletContext application = applicationContext.getBean(ServletContext.class);
application.setAttribute("user", user);
}
}
@RestController
@RestController
@RequestMapping("/listener")
public class TestController {
@GetMapping("/user")
public User getUser(HttpServletRequest request) {
ServletContext application = request.getServletContext();
return (User) application.getAttribute("user");
}
}
https://blog.csdn.net/taojin12/article/details/88338199
网友评论