配置线程池/任务执行器
SpringBoot默认单线程执行,需要多线程异步执行,需要@EnableAsync并设置ThreadPoolTaskExecutor,仅仅开启@EnableAsync 1.4.X版本仍是单线程执行,1.5.X会报错提醒设置线程池!
//可以设置执行任务的线程池的数量。默认是单线程。
@Bean
public ThreadPoolTaskScheduler getDefaultThreadPoolScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(2);
threadPoolTaskScheduler.setThreadNamePrefix("scheduleMoon");
return threadPoolTaskScheduler;
}
//spingBoot默认单线程执行
@Bean
public ThreadPoolTaskExecutor createThreadPoolTaskExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(10);
threadPoolTaskExecutor.setMaxPoolSize(20);
return threadPoolTaskExecutor;
}
配置跨域
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
return corsConfiguration;
}
/**
* 跨域过滤器
* @return
*/
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig()); // 4
return new CorsFilter(source);
}
配置文件上传
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
设置文件大小限制 ,超了,页面会抛出异常信息,这时候就需要进行异常信息的处理了;
factory.setMaxFileSize("400MB"); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize("400MB");
//Sets the directory location where files will be stored.
//factory.setLocation("路径地址");
return factory.createMultipartConfig();
}
配置全局拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截
registry.addInterceptor(new GlobalInterceptor()).addPathPatterns("/**").excludePathPatterns("/common/**");
// registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**");
super.addInterceptors(registry);
}
监听器
spring application context:
public class ApplicationStartUpListener implements ApplicationListener<ApplicationStartingEvent>{
@Override
public void onApplicationEvent(ApplicationStartingEvent event) {
PropertyUtil.loadAllProperties();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>ApplicationStartUpListener EXEC");
}
}
servlet context:
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContex初始化");
System.out.println(sce.getServletContext().getServerInfo());
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContex销毁");
}
}
请求aop日志切割
@Aspect
@Component
public class LogOrderAspect {
private static final Logger logger = LoggerFactory.getLogger(LogOrderAspect.class);
@Resource private LogOrderOperationService logOrderService;
@Before("@annotation(orderAspect)")
public void gennerateLog(JoinPoint point, LogOrderAnnotation orderAspect) throws Throwable {
logger.info(">>>>>>订单操作开始aspect");
ServletContextUtil context = ServletContextUtil.getContext();
HttpServletRequest request = context.getRequest();
LogOrderOperation log = new LogOrderOperation();
log.setAction(orderAspect.action());
log.setUserId(LongUtils.parseLong(request.getParameter("userId")));
Map<String, String[]> params = Maps.newHashMap(request.getParameterMap());
params.put("url", new String[]{request.getRequestURI()});
log.setParams(JSON.toJSONString(params));
log.setCreated(new Date());
logOrderService.insertEntry(log);
}
@After("@annotation(orderAspect)")
public void endLog(JoinPoint point, LogOrderAnnotation orderAspect) {
logger.info(">>>>>>订单操作执行完aspect");
}
@AfterReturning("@annotation(orderAspect)")
public void returnLog(JoinPoint point, LogOrderAnnotation orderAspect) {
logger.info(">>>>>>订单操作执行完aspect,return.................");
}
}