@Profile注解
profile为在不同环境使用不同配置提供支持,例如生产环境与开发环境,数据库配置等。
@profile在3.2以后的版本支持方法级别和类级别,3.1版本只支持类级别。
- 通过设定Enviroment的ActiveProfiles来决定当前context需要使用的配置环境,在开发中使用@Profile注解类或方法达到在不同情况下选择实例化不同的Bean
- 通过设定jvm的spring.profiles.active参数来设置环境
- Web项目设置servlet的context.paramter中
@Scheduled注解
一、注解说明。Spring自带的定时任务执行@Scheduled注解,可以定时的、周期性的执行一些任务。查看@Scheduled的注解可以看到有以下三种:
1.1 String cron() default “” ;
@Scheduled(cron = "0 0 1* * ?")
1.2 long fixedDelay() default -1;
@Scheduled(fixedRate = 1000 * 60,initialDelay = 1000)
1.3 long fixedRate() default -1;
@Scheduled(fixedRate = 1000 * 120)
二、@Scheduled 执行原理说明:
简要介绍:spring在初始化bean后,通过“postProcessAfterInitialization”拦截到所有的用到“@Scheduled”注解的方法,并解析相应的的注解参数,放入“定时任务列表”等待后续处理;之后再“定时任务列表”中统一执行相应的定时任务。
2.1 依次加载所有的实现 Scheduled 注解的类方法。(具体查看 spring-context jar包)说明:
2.2 将对应类型的定时器放入相应的“定时任务列表”中,获取scheduled类参数,之后根据参数类型、相应的延时时间、对应的时区放入不同的任务列表中
2.3:执行相应的定时任务。
说明:定时任务先执行corn,判断定时任务的执行时间,计算出相应的下次执行时间,放入线程中,到相应的时间后进行执行。之后执行按“频率”(fixedRate)执行的定时任务,直到所有任务执行结束。
2.4 接下来看下定时任务run(extends自Runnable接口)方法:
//说明:每次执行定时任务结束后,会先设置下下次定时任务的执行时间,以此来确认下次任务的执行时间。
备注 :从上面的代码可以看出,如果多个定时任务定义的是同一个时间,那么也是顺序执行的,会根据程序加载Scheduled方法的先后来执行。
但是如果某个定时任务执行未完成会出现什么现象呢?
答:此任务一直无法执行完成,无法设置下次任务执行时间,之后会导致此任务后面的所有定时任务无法继续执行,也就会出现所有的定时任务“失效”现象。
所以应用springBoot中定时任务的方法中,一定不要出现“死循环”、“http持续等待无响应”现象,否则会导致定时任务程序无法正常。再就是非特殊需求情况下可以把定时任务“分散”下。
@Component注解
其中base-package为需要扫描的包(含所有子包)1、@Service用于标注业务层组件
2、@Controller用于标注控制层组件(如struts中的action)
3、@Repository用于标注数据访问组件,即DAO组件.
4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Component 对那些比较中立的类进行注释
这里就是说把这个类交给Spring管理,例如重新起个名字叫userManager,由于不好说这个类属于哪个层面,就用@Component