踩坑记录_八月篇_3

2018-8-27 星期一

1.菜单管理、部门管理中id列的可见性设置问题:jquery.treegrid.extension.js ,详情见PDF。

2.展示通知:解决关闭单项通知按钮无效问题。

请确保使用带有 data-dismiss="alert" data 属性的 <button> 元素。

<!-- class="alert alert-dismissable" 可取消警告 配合按钮-->
<div class="alert" style="padding: 0px; margin-bottom: 5px">
    <div class="alert-dismissable">
        <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button>
        <strong>${notice.title}</strong>
        <div>${notice.content}</div>
        <small pattern="yyyy-MM-dd HH:mm:ss">${notice.updatetime}</small>
        <!-- 下划线 -->
        <hr class="simpleTagLabel">
    </div>
</div>

2018-8-28 星期二

1.通用表格展示列生成

{title: '', field: '', visible: true, align: 'canter', valign: 'middle'},

2.产品名映射表

模块:产品名映射表模块基本功能实现
查看产品名映射:自定义mapper,数据从视图ProductNameMappingTable中获取。
添加、修改、删除产品名映射:采用BaseMapper,与数据表ProductNameData建立对应关系。
需要注意的是:
    1. 视图中不存在主键这一字段,修改、删除操作的依赖字段为productId,使用EntityWarpper条件构造器进行操作即可。
    2. 由于视图和数据表的联动关系在数据库中已经存在,若插入一条数据库中产品编号未存在的数据到视图中,此操作无效。
    3. 在产品名映射上,搜索条件整合,可通过产品编号、标准名、别名等多个字段进行视图内的数据查询。现阶段搜索条件不存在多选,如需请参照产品基础信息模块。
    4. 产品信息验证逻辑迁移至添加页面映射界面,编辑页面中产品编号已经设置为不可更改。
    坐标:ProductNameMappingController.java
    /**
     * @Author jiangyanfei
     * @Description 产品信息检查 -- 查询视图所关联表中当前操作数据是否存在
     * @Date 2018/8/28
     * @Param [productNameData]
     * @return boolean
     **/
    public boolean checkProductInfo(ProductNameData productNameData){
        ProductInfo productInfo = iProductBasicInfoService.getProductInfoByProductId(productNameData.getProductID());
        if (productInfo != null) {
            return true;
        }
        return false;
    }
    坐标:productNameMapping_edit.html
    <#input id="productID" name="产品编号" underline="true" value="${productNameMapping.productID}" disabled="disabled" />

2018-8-30 星期四

1.多数据源配置问题

关于多数据源切换问题,在MultiSourceExAop中进行了声明。
1. @DataSource注解只能用于方法,在业务方法名上添加注解,即表示为切换数据源。
2. 多数据源切换逻辑:
    //根据注解中name属性的值,从注解中获得数据源类型。
    DataSource datasource = currentMethod.getAnnotation(DataSource.class);
    if (datasource != null) {
        //数据源切换
        DataSourceContextHolder.setDataSourceType(datasource.name());
        log.debug("设置数据源为:" + datasource.name());
    } else {
        DataSourceContextHolder.setDataSourceType(mutiDataSourceProperties.getDefaultDataSourceName());
        log.debug("设置数据源为:dataSourceCurrent");
    }

    try {
        //正常业务逻辑
        return point.proceed();
    } finally {
        log.debug("清空数据源信息!");
        DataSourceContextHolder.clearDataSourceType();
    }
    可以看出,在切面方法中,每次都会根据注解获取数据源类型,并进行数据源切换。而且,无论业务逻辑是否执行,最终都会清空数据源信息。这里指的清空,是变更为默认数据源类型:MySQL;
3. 方法中嵌套使用多数据源:这里的内外调用方法均添加了@DataSource注解
    经过debug发现,DataSourceContextHolder中的线程为单线程,即一次存储单个数据源信息。
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
    在嵌套使用多数据源的场景中:存在两种情况。
    1. 外调用的数据源切换已完成后内数据源进行数据源切换。
    /**
     * 获取证券交易列表
     */
    @RequestMapping(value = "/list")
    @ResponseBody
    @DataSource(name = DSEnum.DATA_SOURCE_BIZ) //外调用
    public Object list(@RequestParam(value = "condition", defaultValue = "") String condition,
                       @RequestParam(value = "tradingDay", defaultValue = "") String tradingDay) {
        if (condition.equals("") && tradingDay.equals("")) {
            return tradingStockMapper.selectPage(new Page<TradingStock>(1, 10), null);
        }
        //内调用
        return iSecurityDealService.getTradingStockList(condition, tradingDay.replaceAll("-+",""));
    }
    2. 外调用的数据源切换未完成,内数据源的数据源进行切换,此时新建了一个数据库链接。外调用不可正常使用。
    /**
     * 新增证券交易
     */
    @RequestMapping(value = "/add")
    @ResponseBody
    @DataSource(name = DSEnum.DATA_SOURCE_BIZ) //外调用
    public Object add(TradingStock tradingStock) {
        //内调用
        if (iProductBasicInfoService.getProductInfoByProductId(tradingStock.getProductID()) != null){
            tradingStock.setOpdate(new Date());
            tradingStock.setAmount((double) (tradingStock.getVolume() * tradingStock.getPrice()));
            //外调用未完成业务逻辑 -- 出错              
            tradingStockMapper.insert(tradingStock);
        }
        return super.SUCCESS_TIP;
    }
4.解决方案:
    涉及数据源切换的通用逻辑:ProductInfoCheck,将该方法重写后不添加@DataSource注解,其他方法同理,当外调用已经开启注解进行了数据源切换,内调用的方法就不应该再添加@DataSource注解。但由于该种嵌套切换数据源局限于部分操作,因此可以采用该方法进行解决。AOP作用域为当前切点(方法),之前提到的注释数据源关闭时不恰当的,数据源的连接应根据所需进行开关,避免造成资源浪费。

2.多层目录下SpringBoot扫描不到Dao层接口的问题

SpringBoot默认的Spring容器初始化Bean加载路径为:与Application启动类同级目录下,以及同级子级目录下。
由于构造三级菜单的缘故,目录名层次为三级,Spring容器扫描不到。
坐标:MybatisPlusConfig.java 配置类  * 变更为 ** 表示多级目录
@MapperScan(basePackages = {"com.quant.qdvp.modular.**.dao", "com.quant.qdvp.common.persistence.dao"})

2018-8-31 星期五

1.add、edit表单id未标识,表单验空出错

Uncaught TypeError: Cannot read property 'resetForm' of undefined...
xxx_add.html、xxx_edit.html中表单id一定要标明。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小透明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值