目錄放置
-
jsp是 main目錄下 放 webapp(指定爲web訪問的根目錄)
- 跟目錄下放置:WEB-INF
- 下面在放 jsp
-
靜態文件放置在 resource (資源文件夾)的static 目錄下
-
比如js文件夾,那引用就變成:
-
異步線程池
-
異步線程池
-
JMS消息
-
webSocket
-
定時
-
點擊生成報表,而不需要立馬就查看到報表
-
查看報表,是業務人員看的。
定義線程 和 開啓異步可用
- 配置異步線程池的接口
public interface AsyncConfigurer {
//返回一個自定義的線程池,提供空閒的線程來執行異步任務
@Nullable
default Executor getAsyncExecutor() {
return null;
}
//處理異常的處理器
@Nullable
default AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
- @EnableAsync,開啓異步可用。可使用 @Async
異步實例
配置
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
// 定義線程池
@Override
public Executor getAsyncExecutor() {
// 定義線程池
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
// 核心線程數
taskExecutor.setCorePoolSize(10);
// 線程池最大線程數
taskExecutor.setMaxPoolSize(30);
// 線程隊列最大線程數
taskExecutor.setQueueCapacity(2000);
// 初始化
taskExecutor.initialize();
return taskExecutor;
}
}
使用
@Controller
@RequestMapping("/async")
public class AsyncController {
// 注入異步服務接口
@Autowired
private AsyncService asyncService = null;
@GetMapping("/page")
public String asyncPage() {
System.out.println("請求線程名稱:" + "【" + Thread.currentThread().getName() + "】");
// 調用異步服務
asyncService.generateReport();
return "async";
}
}
public interface AsyncService {
public void generateReport();
}
@Service
public class AsyncServiceImpl implements AsyncService {
@Override
@Async // 聲明使用異步調用
public void generateReport() {
// 打印異步線程名稱
System.out.println("報表線程名稱:"
+ "【" + Thread.currentThread().getName() +"】");
}
}
線程不定,哈哈哈
請求線程名稱:【http-nio-8080-exec-1】
報表線程名稱:【ThreadPoolTaskExecutor-1】
請求線程名稱:【http-nio-8080-exec-2】
報表線程名稱:【ThreadPoolTaskExecutor-2】
請求線程名稱:【http-nio-8080-exec-6】
報表線程名稱:【ThreadPoolTaskExecutor-3】
請求線程名稱:【http-nio-8080-exec-1】
報表線程名稱:【ThreadPoolTaskExecutor-5】