SHO酱的Blog

SHO酱的Blog

BladeX-Boot 使用多数据源踩坑

2023-08-03

版本说明

Blade-Boot 3.1.1.RELEASE

问题及解决方法

错误1

  • 错误信息:配置多数据后报错显示找不到数据源的url配置

  • 解决方法:修改LauncherServiceImpl类中的

// PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");// enabled 原为 false

PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "true"); // 修改为 true

错误2

  • 错误信息:启用多数据源后,在Blade官方自带的通知示例中,报租户(Tenant)相关错误

  • 解决方法:问题出在 NoticeController 中使用了@TenantDS 租户数据源配置,如果仅仅是在 yml 中配置的多数据源这里可以将 @TenantDS 删掉

//@TenantDS 这里 <--
@RestController
@RequestMapping(AppConstant.APPLICATION_DESK_NAME + "/notice")
@AllArgsConstructor
@ApiSort(2)
@Api(value = "用户博客", tags = "博客接口")
public class NoticeController extends BladeController {

	private final INoticeService noticeService;
... ...

错误3

  • 错误信息:在做业务数据查询时,报错:找不到 xxx.blade_scope_data 表(表不存在)(xxx表示数据源代表的库名)

  • 解决方法:参考 https://sns.bladex.cn/q-1448.html 中 gtfhao 的回答;复制 blade/BladeX-Tool 项目中 org.springblade.core.datascope.handler 的 BladeScopeModelHandler 类到 BladeX-Boot 项目中 org.springblade.common.scopedata 包中(需要新建包);在 BladeScopeModelHandler 中添加配置注解

package org.springblade.common.scopedata;

/**
 * BladeScopeModelHandler
 *
 * @author Chill
 */
@Component // 这里 <--
@Master // 这里 <--
@RequiredArgsConstructor
public class BladeScopeModelHandler implements ScopeModelHandler {

    private static final String SCOPE_CACHE_CODE = "dataScope:code:";
    private static final String SCOPE_CACHE_CLASS = "dataScope:class:";
    private static final String DEPT_CACHE_ANCESTORS = "dept:ancestors:";
    private static final DataScopeModel SEARCHED_DATA_SCOPE_MODEL = new DataScopeModel(Boolean.TRUE);

    private final JdbcTemplate jdbcTemplate;