/** * 多租户,支æŒå¦‚下层é¢ï¼š * 1. DB:基于 MyBatis Plus 多租户的功能实现。 * 2. Redis:通过在 Redis Key 上拼接租户编å·çš„æ–¹å¼ï¼Œè¿›è¡Œéš”离。 * 3. Web:请求 HTTP API æ—¶ï¼Œè§£æž Header çš„ tenant-id 租户编å·ï¼Œæ·»åŠ 到租户上下文。 * 4. Securityï¼šæ ¡éªŒå½“å‰ç™»é™†çš„用户,是å¦è¶Šæƒè®¿é—®å…¶å®ƒç§Ÿæˆ·çš„æ•°æ®ã€‚ * 5. Job:在 JobHandler 执行任务时,会按照æ¯ä¸ªç§Ÿæˆ·ï¼Œéƒ½ç‹¬ç«‹å¹¶è¡Œæ‰§è¡Œä¸€æ¬¡ã€‚ * 6. MQ:在 Producer å‘é€æ¶ˆæ¯æ—¶ï¼ŒHeader 带上 tenant-id 租户编å·ï¼›åœ¨ Consumer 消费消æ¯æ—¶ï¼Œå°† Header çš„ tenant-id 租户编å·ï¼Œæ·»åŠ 到租户上下文。 * 7. Async:异æ¥éœ€è¦ä¿è¯ ThreadLocal çš„ä¼ é€’æ€§ï¼Œé€šè¿‡ä½¿ç”¨é˜¿é‡Œå¼€æºçš„ TransmittableThreadLocal å®žçŽ°ã€‚ç›¸å…³çš„æ”¹é€ ç‚¹ï¼Œå¯è§ï¼š * 1)Spring Async: * {@link com.iailab.framework.quartz.config.IailabAsyncAutoConfiguration#threadPoolTaskExecutorBeanPostProcessor()} * 2)Spring Security: * TransmittableThreadLocalSecurityContextHolderStrategy * å’Œ IailabSecurityAutoConfiguration#securityContextHolderMethodInvokingFactoryBean() 方法 * */ package com.iailab.framework.tenant;