深入淺出boot2.0 13章 1異步線程池和boot目錄放置

目錄放置

  • 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章