spring-boot启动警告:No MyBatis mapper was found…

spring-boot继承mybatis启动时,警告如下: 2018-09-10 15:00:14.721 WARN  tk.mybatis.spring.mapper.ClassPathMapperScanner --No MyBatis mapper was found in '[com.kevin]' package. Please check your configuration. 使用的tk的开源项目进行mybatis集成,百度了很多解决方案,最终看到一位前辈介绍:doScan()会扫描启动类同级目录下的mapper接口,但是合理的目录结果绝对不允许所有的mapper都在启动类目录下,所以在启动类目录下添加了一个伪mapper,如下: 再重新启动服务,就不会出现如上warn信息了…… from:https://my.oschina.net/kevin2kelly/blog/2046324 ========================================================================================= 光子:通过以上兄弟的方法,我的警告确实没有了。但经过dev-tools热启动后还是会提醒: 无法获取实体类com.w3cnet.doctoradvice.entity.HisvMzbrJzxx对应的表名 …… 还需要安装一下:Mapper Spring Boot Starter ,贴上地址:

折腾了几次,终于完美解决……   参考:https://blog.csdn.net/zwrlj527/article/details/91824220

龙生   27 Nov 2020
View Details

Cargo 教程

Cargo 是什么 Cargo 是 Rust 的构建系统和包管理器。 Rust 开发者常用 Cargo 来管理 Rust 工程和获取工程所依赖的库。在上个教程中我们曾使用 cargo new greeting 命令创建了一个名为 greeting 的工程,Cargo 新建了一个名为 greeting 的文件夹并在里面部署了一个 Rust 工程最典型的文件结构。这个 greeting 文件夹就是工程本身。 Cargo 功能 Cargo 除了创建工程以外还具备构建(build)工程、运行(run)工程等一系列功能,构建和运行分别对应以下命令:

Cargo 还具有获取包、打包、高级构建等功能,详细使用方法参见 Cargo 命令。 在 VSCode 中配置 Rust 工程 Cargo 是一个不错的构建工具,如果使 VSCode 与它相配合那么 VSCode 将会是一个十分便捷的开发环境。 在上一章中我们建立了 greeting 工程,现在我们用 VSCode 打开 greeting 文件夹(注意不是 runoob-greeting)。 打开 greeting 之后,在里面新建一个新的文件夹 .vscode (注意 vscode 前面的点,如果有这个文件夹就不需要新建了)。在新建的 .vscode 文件夹里新建两个文件 tasks.json 和 launch.json,文件内容如下: tasks.json 文件

  launch.json 文件(适用在 Windows 系统上)

    launch.json 文件(适用在 Linux 系统上)

    launch.json 文件(适用在 Mac OS 系统上)

  […]

龙生   27 Nov 2020
View Details

Rust 教程

Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apache License 2.0 双重协议声明下的免费开源软件。截至目前( 2020 年 1 月)最新的编译器版本是 1.41.0。 Rust 官方在线工具: https://play.rust-lang.org/。 Rust 系列文章内容由 Sobin 收集整理。   Rust语言的特点 高性能 – Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。 可靠性 – Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。 生产力 – Rust 拥有出色的文档、友好的编译器和清晰的错误提示信息, 还集成了一流的工具 —— 包管理器和构建工具, 智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。 Rust的应用 Rust 语言可以用于开发: 传统命令行程序 – Rust 编译器可以直接生成目标可执行程序,不需要任何解释程序。 Web 应用 – Rust 可以被编译成 WebAssembly,WebAssembly 是一种 JavaScript 的高效替代品。 网络服务器 – Rust 用极低的资源消耗做到安全高效,且具备很强的大规模并发处理能力,十分适合开发普通或极端的服务器程序。 嵌入式设备 – Rust 同时具有JavaScript 一般的高效开发语法和 C 语言的执行效率,支持底层平台的开发。 谁适合阅读本教程? 本教程对于初级的编程知识将默认读者已经掌握,所以如果你阅读本教程,你需要对初级的编程知识有一定的了解(最好已经初识 C/C++ 或 JavaScript 编程语言)。 第一个 Rust 程序 Rust 语言代码文件后缀名为 .rs, 如 runoob.rs。

参考链接 Rust 官方网站:https://www.rust-lang.org/zh-CN Rust 官方文档:https://doc.rust-lang.org/ Rust Play:https://play.rust-lang.org/ Visual Studio […]

龙生   27 Nov 2020
View Details

Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

内容简介 本文主要说明在Java8及以上版本中,使用stream().filter()来过滤一个List对象,查找符合条件的对象集合。 List对象类(StudentInfo)

  测试数据

  输出Students列表

输出结果如下图:  使用filter()过滤List

结果如下图:   from:https://www.cnblogs.com/codecat/p/10912454.html

龙生   26 Nov 2020
View Details

java8 .stream().map().collect()用法

API: https://www.runoob.com/java/java8-streams.html

  说明: steam():把一个源数据,可以是集合,数组,I/O channel, 产生器generator 等,转化成流。 forEach():迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数.

  map():用于映射每个元素到对应的结果。以下代码片段使用 map 输出了元素对应的平方数:

  filter():filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:

  sorted(): 用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:

  Collectors(): 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:

  from:https://blog.csdn.net/shine_guo_star/article/details/94383319

龙生   26 Nov 2020
View Details

jdk8的特性stream().map()

转: https://blog.csdn.net/sanchan/article/details/70753645 java8的optional的使用: http://www.jdon.com/idea/java/using-optional-effectively-in-java-8.html http://www.runoob.com/java/java8-optional-class.html Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。 Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。 Optional 类的引入很好的解决空指针异常。 类声明 以下是一个 java.util.Optional<T> 类的声明: public final class Optional<T> extends Object

  from:https://www.cnblogs.com/fengli9998/p/9002377.html

龙生   26 Nov 2020
View Details

DapperExtensions扩展,一个不再更新的小众类库的踩坑之路

公司一个项目要从.net framework平台转成.net core平台,都是为了跨平台啊。 老的项目中用了个小众的类库:DapperExtensions。 有个同事直接nuget安装了该类库的.net core版本:DapperExtensions.NetCore,然后一直报错;于是向我求助。 报错代码如下图: 报错信息: P.S 同事用的是异步调用,同步调用是没问题的。 由于此类库不再更新,官网也没有了……也找不到文档; 在网上很少的资料中,都是些简单的示例,使用的都是同步调用,但同事用的是异步调用。我们一块折腾了半个上午,也没解决。但还不想放弃啊……于是又双叒叕重新撸了n遍,豁然发现:生成的MySQL语句里怎么会有中括号!灯下黑~…… 于是,网上一通搜,终于找到一篇说SQL方言的文档,看了一下DapperExtensions的源码,发现也有设置SQL方言的方法:

运行……还是报错……%~@#¥,没起作用!无奈……拉倒吧,把代码改为同步调用吧。 还是不想放弃,再看一眼吧——竟然发现DapperExtensions的源码中异步方法和同步方法的SQL方言竟然是单独设置的,这类库设计的也没谁了……,于是设置了一下异步的SQL方言为MySQL,终于解决了。代码如下:

  总结: 不要使用小众类库,尤其是个人开发的。因为出了问题太难解决了。 解决问题要细心,更要有耐心;放空思想,从头多撸几遍。 小众类库的代码设计考虑不周: a. 比如说,代码已经写为new MySqlConnection(ConnString),SQL方言就应该自动设置为MySQL了。 b. 另一个,对于SQL方言,设置一次就行了,不应该设计成异步要单独设置。   解决过程实属不易,希望能帮助大家,谢谢~  

龙生   25 Nov 2020
View Details

SQL注入测试

简介 SQL 注入是一种专门针对SQL语句的攻击方式。通过把SQL命令插入到web表单提交、输入域名或者页面请求的查询字符串中,利用现有的程序,来非法获取后台的数据库中的信息。在web的测试中涉及到的会比较多些。 注入原理 存在注入的原因是后台在编写程序时,没有对用户输入的数据做过滤。 例: 1、用户在某个输入框提交的参数是123。 浏览器提交的URL为: http://www.xxx.com/index.php?id=123 服务器后台执行SQL语句:select * from table1 where id = 123 此时是没有任何影响的。   2、 如果用户提交的参数是 123;drop table 服务器后台执行SQL语句: select * from table1 where id =123 ; drop table 相当于后台执行了两条SQL语句,查表,并且把table删除, 从而导致了SQL注入   检测注入的方法 目前主要有两种检测方式: 一、手工注入检测流程: 1.  判断是否存在注入点 www.abc.com/index.php?id=2 www.abc.com/index.php?id=2 and 1=1 www.abc.com/index.php?id=2 and 1=2 第2条返回正常, 第1,3条返回不正常说明id参数存在注入漏洞 2.  判定是否存在admin表 www.abc.com/index.php?id=2 and exists(select * from admin) 返回正常,存在admin表   3.  猜admin表中的字段名 www.abc.com/index.php?id=2 and exists(select username from admin) 返回正常 表示admin表存在username字段   4.  检测其他sql操作   二、工具检测: sqlmap:  sqlmap是一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。   1. 下载地址 https://github.com/sqlmapproject/sqlmap.git   2. 常用命令       测试 以一个sqlmap检测URL为例: […]

龙生   20 Nov 2020
View Details

Vue 中 强制组件重新渲染的正确方法

有时候,依赖 Vue 响应方式来更新数据是不够的,相反,我们需要手动重新渲染组件来更新数据。或者,我们可能只想抛开当前的DOM,重新开始。那么,如何让Vue以正确的方式重新呈现组件呢? 强制 Vue 重新渲染组件的最佳方法是在组件上设置:key。 当我们需要重新渲染组件时,只需更 key 的值,Vue 就会重新渲染组件。 这是一个非常简单的解决方案。 当然,你可能会对其他方式会更感兴趣: 简单粗暴的方式:重新加载整个页面 不妥的方式:使用 v-if 较好的方法:使用Vue的内置forceUpdate方法 最好的方法:在组件上进行 key 更改 简单粗暴的方式:重新加载整个页面 这相当于每次你想关闭应用程序时都要重新启动你的电脑。 这种方式或许有用,但这是一个非常糟糕的解决方案,不要这样做,我们来看看更好的方法。 不妥的方式:使用 v-if v-if指令,该指令仅在组件为true时才渲染。 如果为false,则该组件在DOM中不存在。 来看看,v-if 是怎么工作的,在template中,添加v-if指令:

  在script 中,使用nextTick的方法

  上面的过程大致如下: 刚开始 renderComponent设置为true,因此渲染 my-component 组件 当我们调用forceRerender时,我们立即将renderComponent设置为false 我们停止渲染my-component,因为v-if指令现在计算结果为false 在nextTick方法中将renderComponent设置回true 当v-if指令的计算结果为true时,再次渲染my-component 在这个过程中,有两个部分比较重要 首先,我们必须等到nextTick,否则我们不会看到任何变化。 在Vue中,一个 tick 是一个DOM更新周期。Vue将收集在同一 tick 中进行的所有更新,在 tick 结束时,它将根据这些更新来渲染 DOM 中的内容。如果我们不等到next tick,我们对renderComponent的更新就会自动取消,什么也不会改变。 其次,当我们第二次渲染时,Vue将创建一个全新的组件。 Vue 将销毁第一个,并创建一个新的,这意味着我们的新my-component将像正常情况一样经历其所有生命周期-created,mounted等。 另外,nextTick 可以与 promise 一起使用:

  不过,这并不是一个很好的解决方案,所以,让我们做 Vue 想让我们做的 较好的方法:forceUpdate 方法 这是解决这个问题的两种最佳方法之一,这两种方法都得到了Vue的官方支持。 通常情况下,Vue 会通过更新视图来响应依赖项中的更改。然而,当我们调用forceUpdate时,也可以强制执行更新,即使所有依赖项实际上都没有改变。 下面是大多数人使用这种方法时所犯的最大错误。 如果 Vue 在事情发生变化时自动更新,为什么我们需要强制更新呢? 原因是有时候 Vue 的响应系统会让人感到困惑,我们认为Vue会对某个属性或变量的变化做出响应,但实际上并不是这样。在某些情况下,Vue的响应系统根本检测不到任何变化。 所以就像上一个方法,如果你需要这个来重新渲染你的组件,可能有一个更好的方法。 有两种不同的方法可以在组件实例本身和全局调用forceUpdate:

  重要提示:这不会更新任何计算属性,调用forceUpdate仅仅强制重新渲染视图。 最好的方法:在组件上进行 key 更改 在许多情况下,我们需要重新渲染组件。 要正确地做到这一点,我们将提供一个key属性,以便 Vue 知道特定的组件与特定的数据片段相关联。如果key保持不变,则不会更改组件,但是如果key发生更改,Vue 就会知道应该删除旧组件并创建新组件。 正是我们需要的! 但是首先,我们需要绕一小段路来理解为什么在Vue中使用key。 为什么我们需要在 Vue 中使用 key 一旦你理解了这一点,那么这是了解如何以正确方式强制重新渲染的很小的一步。 假设我们要渲染具有以下一项或多项内容的组件列表: 有本地的状态 某种初始化过程,通常在created或mounted钩子中 […]

龙生   19 Nov 2020
View Details

gitlab 的 CI/CD 初次尝试

一、前言 ci/cd 持续集成持续交付,开发人员尝尝会遇到一些重复工作,比如一个asp.net的网站代码,写完之后要发布,然后再将发布内容移动到部署的服务器上再进行部署,就算你只改了一个页面上的一个字,也要将之前的发布部署过程重新做一遍。 CI 解决了这个重复性问题,开发人员只需git push 提交代码,剩下的工作交给CI , 做CI工作的有gitlab-ci/cd  Jenkins k8s等,中小项目gitlab-ci比较合适,因为它更轻量级一些,本篇仅讨论gitlab的cicd功能。 二、环境   IP 角色 192.168.10.202(ubuntu) gitlab 192.168.10.208(centos) git,docker,gitlab-runner           gitlab git docker 三者的安装 略。且本篇是以docker镜像方式部署 上图为gitlab-ci的过程,其实它只是省略了一些我们的手动发布部署过程,将其自动化,但原来的流程还是一个不能少。所以,我们要进行的第一步,就是手动实现一遍流程。   三、手动实现一遍 (gitlab服务器) 创建代码仓库—> (开发PC) git clone —> (开发pc) 修改代码,添加dockerfile —> (开发pc) git push —> (部署服务器) git pull —> (部署服务器) docker build ,docker run 1、创建代码仓库 在创建之前,需要在使用git的机器上设置好ssh,可以参考之前的https://www.cnblogs.com/hallejuayahaha/p/11996332.html 要注意的是,在部署机器上,gitlab-runner安装好后,需要添加一个gitlab-runner的用户,需要添加这个用的ssh,因为在ci自动化后,在部署服务器上的操作都是由这个用户来做的,所以不仅要添加它的ssh,也要docker 免去sudo的指令。 总之就是让gitlab-runner用户,在做部署过程中,不要受到权限的阻碍。 ******docker免去敲sudo******* 在安装完docker之后,也会出现一个docker用户组,将你要免去敲sudo的用户添加进去,就可以了

  添加代码仓库 并将一个.netcore项目创建进去 添加dockerfile文件,仅需在项目上右键,docker支持,vs就可以自动添加。然后git push 这样开发pc端的代码就都提交到gitlab服务器上了,  2、部署端git pull ,docker build , docker run       镜像已经成功启动,打开浏览器,输入ip + 暴露出来的端口8090 PS:  .NETCORE web中,startup.cs文件中,有 app.UseHsts(); app.UseHttpsRedirection(); 这两行要注释掉,不然网站回一直往https跳转,没法进入http的80端口   整个手动流程成功。 […]

龙生   19 Nov 2020
View Details
1 105 106 107 411