Java Web开发
Java 和 Spring Cloud
「已注销」
这个作者很懒,什么都没留下…
展开
-
Spring Boot应用使用maven-assembly插件实现Apache风格打包
maven-assembly官网:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.htmlSpring Boot 应用实践打包的目录结构:lib 依赖boot 主jar包conf 配置文件log 日志bin 启停<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration&原创 2021-08-16 16:39:43 · 294 阅读 · 1 评论 -
错误:不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK
使用oracle错误不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK解决方案<!-- orai18n --><dependency> <groupId>cn.easyproject</groupId> <artifactId>orai18n</artifactId> <version>12.1.0.2.0</version></dependen原创 2021-08-16 14:49:40 · 1348 阅读 · 1 评论 -
Spring Boot整合Redis并且使用Redis
整合Redis依赖<!-- redis --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>配置文件,根据实际进行配置spring: redis: host: 10.163.0.96原创 2021-08-16 14:48:29 · 148 阅读 · 0 评论 -
有关MyBatis的resultType使用内部类的思考
说明今日写了一个mybatis resultType使用了内部类,编译后一直报错找不到类。修复方案如果B类是A类的内部类,需要满足使用static修饰必须有空的构造方法resultType=类$内部类关于使用static修饰的说法:Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called stati原创 2021-08-05 09:20:59 · 1943 阅读 · 0 评论 -
JWT令牌在Spring Boot中的使用
什么是JWT网站:https://jwt.io/introductionJWT对象为一个很长的字符串,字符之间通过"."分隔符分为三个子串。每一个子串表示了一个功能块,总共有以下三个部分:JWT头、有效载荷和签名。JWT加密后数据通常由三部分构成,分别为Header(头部),Payload(负载),Signature(签名),对应其格式如下:JWT的组成JWT头部分是一个描述JWT元数据的JSON对象。{ "alg": "HS256", "typ": "JWT"}alg属性表示原创 2021-07-28 11:24:30 · 155 阅读 · 0 评论 -
Spring Boot中拦截器(Interceptor)的使用
本文使用的Spring Boot版本:2.5.3拦截器为了直观,直接写代码了,根据实际情况修改。主要implements HandlerInterceptor/** * 鉴权拦截器 * */@Slf4j@Component@RequiredArgsConstructorpublic class AccessInterceptor implements HandlerInterceptor { final AuthService authService; @Overr原创 2021-07-28 10:26:56 · 153 阅读 · 0 评论 -
Spring Boot 使用AOP打印接口日志
引入依赖<!--aop--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>切面类@Aspect@Component@Slf4jpublic class HttpAspect { //你的控制器路径原创 2021-07-20 09:18:51 · 130 阅读 · 0 评论 -
使用@RequiredArgsConstructor注解减少代码量
lomboklombok插件帮你简化了很多代码,一般我们只用到了实体类中。@Slf4j可以在任意类中打印日志@RequiredArgsConstructor此方式可以减少依赖注入时候的构造参数的实现,如下图如果依赖注入很多,那么这个构造函数就很多代码。添加@RequiredArgsConstructor就可以不需要写构造参数了。代码得到了简化。...原创 2021-07-12 15:04:04 · 865 阅读 · 0 评论 -
MyBatis Plus中实现表信息加引号
需求描述PGSQL中表名和字段名都是大写,在写sql的时候必须加引号。后端配置mybatis-plus: global-config: db-config: capital-mode: true column-format: "\"%s\""类注解信息@TableName("\"TABLE_NAME\"")但是id应该自己写@TableId(value = "\"XX_ID\"")实现效果...原创 2021-06-18 11:43:54 · 5812 阅读 · 2 评论 -
jdk1.8中的@FunctionalInterface的使用
函数式接口函数式接口(Functional Interface)是 Java 8对一类特殊类型的接口的称呼。 这类接口只定义了唯一的抽象方法的接口。这种类型的接口也称为SAM接口,即Single Abstract Method interfaces。接口有且仅有一个抽象方法允许定义静态方法允许定义默认方法允许java.lang.Object中的public方法该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响,如果编写的不是函数式接口,但是加上了@Functio原创 2021-06-17 14:29:25 · 250 阅读 · 0 评论 -
pdi(kettle)中使用switch/case进行数据过滤
说明switch/case不是编程里的分支定义,而是一种数据过滤方式。需求一张学生数据,需要使用pdi处理出男生和女生的数据信息转换excel输入点击浏览后,再增加选择工作表,点击获取工作表选择字段,点击获取头部字段添加switch/case控件按照上面的信息填写输出按照上面的填写,女生数据也是如此,只是文件名更新一下。结果...原创 2021-06-11 14:16:34 · 433 阅读 · 2 评论 -
Kettle(PDI)中在job中循环使用上一个转换的结果
需求一个转换获取了一组数据,后续转换需要根据此转换的每一行进行后续操作。示例转换1此抓换提供了一组数据元数据数据转换2此转换需要循环换取上一个转换的数据数据获取字段定制文件JOBJavaScriptvar prevRow=previous_result.getRows();if (prevRow == null &&(prevRow.size()=0)){ false;}else{ parent_job.setVariable原创 2021-06-11 11:49:31 · 590 阅读 · 0 评论 -
使用Security和Oauth2搭建授权服务器和资源服务器
安装本文使用最新版本的依赖。父pom,省略其他不相关依赖,根据实际指定和添加<dependencyManagement> <dependencies> <!-- spring-cloud --> <dependency> <groupId>org.springframework.cloud</groupId>原创 2021-06-07 22:05:48 · 238 阅读 · 1 评论 -
在前端layui项目中使用ztree
说明ztree是一款很好的树形控件,无需对数据进行严格的格式控制,比如需要建立层级关系,只要你数据存在parent_id即可官网:http://www.treejs.cn/v3/main.php#_zTreeInfo基础使用,例子都在官网看。这里讲述怎么集成。项目集成项目是layui,其本身有jquery模块,为了配合插件,需要重新引入。<link th:href="@{/lib/ztree/css/metroStyle/metroStyle.css}" rel="stylesheet"&原创 2021-05-19 11:05:40 · 1115 阅读 · 0 评论 -
Spring Boot 下载、上传、导出等基本方式
下载文件一般是下载模板文件通过本地文件地址放在resources中通过外部oss平台(oss,minio等)这里描述第二种。将文件放在resources文件夹中,为了保证文件完整性,可以使用压缩包。当然也可以通过设置maven参数来保证文件完整性。 public void downloadTpl(HttpServletResponse response) { response.setContentType("application/octet-stream");原创 2021-05-10 15:19:36 · 191 阅读 · 0 评论 -
Spring Boot项目使用Prometheus监控
什么是Prometheus官网以及下载地址https://prometheus.io/download/windows安装下载Prometheus下载grafanahttps://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1&platform=windows配置Prometheus这里配置spring boot应用scrape_configs: # The job name is ad原创 2021-04-30 14:16:03 · 205 阅读 · 3 评论 -
Apache Skywalking的安装与使用
说明至于什么是Skywalking,不是本文要讲述的。windows安装下载elasticsearch 7到官网下载最新,我下载到的7.12.1到bin目录,点击elasticsearch.bat启动访问http://localhost:9200/elasticsearch 安装完成。安装skywalking到apache官方下最新版本默认配置直接启动,bin目录下的startup.bat然后访问:http://localhost:8080/Linux docker安装原创 2021-04-30 12:20:08 · 354 阅读 · 0 评论 -
Spring Boot 整合knife4j实现漂亮的API文档
knife4j项目地址:https://doc.xiaominfo.com/knife4j/依赖基于Swgger3.0 <!-- knife4j-springdoc-ui --> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter&l原创 2021-04-26 09:15:30 · 905 阅读 · 0 评论 -
Spring Boot 整合Druid连接池
DruidDruid是一个JDBC组件,它包括三部分:DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。DruidDataSource 高效可管理的数据库连接池。SQLParserDruid可以做什么?可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库原创 2021-04-26 09:08:20 · 77 阅读 · 0 评论 -
使用kisso单点登录示例-前后端分离
源码地址:https://gitee.com/fanling521/kisso-demo-project主要技术栈Spring BootKissovue.js实践目标前端分离后,实现单点登录前端(postman测试)A前端:系统节点 B前端:模块1节点 C前端:模块2节点(略)后端A后端:认证、系统、登录节点,颁发kisso认证的cookie B后端:模块1的后端服务,添加了拦截器判断。测试(预期目标)POSTMAN1(主节点、登录)POST http://localh原创 2021-04-25 14:43:37 · 456 阅读 · 1 评论 -
spring boot 项目显示CONDITIONS EVALUATION REPORT
问题复现CONDITIONS EVALUATION REPORT启动程序的时候,出现大量的这样的日志。解决办法在配置文件中配置日志打印等级logging: file: name: logs/xxx.log level: org.springframework.boot: error主要在level后添加org.springframework.boot: error这样看上去就清爽很多了。...原创 2021-04-22 09:01:03 · 713 阅读 · 0 评论 -
Mybatis-plus枚举类的使用
说明目的就是将代码项转为文字描述实践代码配置类@Beanpublic Jackson2ObjectMapperBuilderCustomizer customizer() {return builder -> builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);}配置文件mybatis-plus: typeEnumsPackage: org.example.enumsenu原创 2021-04-01 17:40:17 · 728 阅读 · 0 评论 -
Java多线程编程基础(1)
多线程基础线程的启动,暂停,停止线程的优先级线程的安全性什么是多线程,线程与进程线程:线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础Java 实现多线程继承Thread类,重写run方法实现Runnable接口使用第一种局限在于不可多继承,需要多继承可以使用第二种方式。Thr原创 2021-03-22 22:29:41 · 81 阅读 · 1 评论 -
Spring中几个注解@Autowired、@Resource、@Qualifier用法
概述这几个都是实现注入Bean,使用 @Autowired 注解是 Spring 依赖注入的绝好方法,但是当实现类很多就不知道注入哪个了。@Autowired 按类型装配 Spring Bean@Resource 按名称即为@Autowired+@Qualifier多个实现类如果直接使用@Autowired,则抛出NoUniqueBeanDefinitionException,搭配@Qualifier完成使用。public interface MultiService { /**原创 2021-03-19 15:01:55 · 184 阅读 · 0 评论 -
Java动态代理:JDK动态代理和cglib
代理模式为其他对象提供一个代理以控制对某个对象的访问。代理类主要负责为委托了(真实对象)预处理消息、过滤消息、传递消息给委托类,代理类不现实具体服务,而是利用委托类来完成服务,并将执行结果封装处理。静态代理简单说就是对接口实现2次,其中一次执行需要被代理对实现类,每次只能代理一个类。动态代理利用反射机制在运行时创建代理类。JDK动态代理主要使用对类是Proxy和InvocationHandler举例如下:public interface IStudent { /** *原创 2021-03-18 21:34:58 · 94 阅读 · 0 评论 -
Spring Cloud Alibaba 解决方案
前言Spring Cloud中的几乎所有的组件都使用Netflix公司的产品,众多组件都要停止更新,而Spring Cloud Alibaba,目前正处于蓬勃发展的态式。Nacos (配置中心与服务注册与发现)Sentinel (分布式流控)Seata (分布式事物)RocketMQ (消息队列)Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。Alibaba Cloud OSS:阿里云对象存储服务Alibaba Cloud SchedulerX:阿里中间件团队原创 2021-03-01 14:54:03 · 194 阅读 · 0 评论 -
Spring Boot2.x自定义错误页面
说明网上很多方法,但都不是最新,最好的。这里直接使用官方配置完成。我的版本:2.3.5.RELEASE配置error页面首先新增一个404页面。命名为error.html配置文件的源码public class ErrorProperties { /** * Path of the error controller. */ @Value("${error.path:/error}") private String path = "/error"; /** * Include原创 2021-01-12 21:07:14 · 207 阅读 · 0 评论 -
使用minio自行搭建oss系统,存储文件
前言你可以购买如阿里云、七牛云、腾讯云等oss产品,也可以在内部网络搭建。minio网站:https://docs.min.io/cn/MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 M原创 2021-01-12 15:55:36 · 5392 阅读 · 1 评论 -
Spring Cloud Gateway 自定义返回错误信息
前提你需要一个过滤器@Slf4j@Componentpublic class MyGlobalFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { log.info("-----------------全局过滤器MyGlobalFilter----原创 2021-01-06 18:06:00 · 2140 阅读 · 0 评论 -
微信小程序下拉分页解决方案
下拉刷新数据设置数据 data: { total: 0, current: 0, list: [], hasMoreData: false }total 总数current 当前分页,默认0list 返回的数据hasMoreData 是否还有数据如果有搜索将所有的信息重置 this.setData({ total: 0, current: 0, list: [], }) this.loa原创 2021-01-03 11:35:06 · 617 阅读 · 0 评论 -
springboot中thymeleaf的使用技巧
众所周知thymeleaf是springboot官方前端模板。对于简单的web应用,使用他还是很方便的,这里记录下一些使用技巧循环用法<tr th:each="child:${user}"> <th scope="row" th:text="${childStat.index+1}"></th> <td th:text="${child.username}"></td> <td th:text="${child原创 2020-12-08 14:29:41 · 135 阅读 · 0 评论 -
Java中遇到的异常解决
说明今天写了几行代码如下List<String> list = Arrays.asList(tagContent.split(";"));list.add(newTag);报错如下:Exception in thread "main" java.lang.UnsupportedOperationException跟进源码:/** * @serial include */private static class ArrayList<E> extends Ab原创 2020-08-27 15:49:13 · 168 阅读 · 0 评论 -
升级使用SpringFox的swagger-ui 3.0.0版本
说明你的项目已经使用了sawgger2.x版本。升级新特性https://github.com/springfox/springfoxNOTE: Would love feedback to make this betterRemove explicit dependencies on springfox-swagger2Remove any @EnableSwagger2… annotationsAdd the springfox-boot-starter dependency原创 2020-07-18 22:30:51 · 20521 阅读 · 2 评论 -
mybatis-plus使用ASSIGN_ID来作为生成主键
背景之前项目中的主键使用数据库自增,发现后台不太友好。之后又换成了UUID,字符串逐渐不易检索。项目使用了mybatis-plus,查阅文档发现可以使用分布式ID开始更换mybatis-plus 版本为3.3.1文档地址:https://mp.baomidou.com/guide/annotation.html#tableid <!-- mybatis-plus -...原创 2020-04-14 16:34:46 · 26764 阅读 · 7 评论 -
最完整的搭建vue开发环境教程
环境准备下载需要的软件和环境。nodejs环境,官网下载,直接安装即可。vscode编辑器、IDEA编辑器,官网下载安装即可。配置npmnpm 是nodejs的包管理工具。(1)配置npm的仓库镜像地址npm config set registry http://registry.npm.taobao.org/不过当你要发布包的时候,需要修改回来npm config set...原创 2020-03-27 21:30:40 · 867 阅读 · 1 评论 -
如何将本地的jar包放入本地仓库中
说明目前有个问题,需要将一个本地jar包放入本地仓库中,然后可以用pom引用。举例说明将hanlp-1.7.7.jar放在桌面上,右键复制路径修改下面的命令,注意是需要将命令用引号包裹起来。mvn install:install-file "-Dfile=C:\Users\fanling\Desktop\hanlp-1.7.7.jar" "-DgroupId=com.hankcs" ...原创 2020-03-25 14:25:05 · 796 阅读 · 0 评论 -
基于Spring Boot的自定义模拟接口项目的实现
背景前端调用接口,但是需要后台提供模拟接口。根据这个需求,完成了一个模拟项目接口,比较简易。但是实际过程中用得不是太多,于是准备下线,这里记录下代码及表结构,供查看。表结构drop table if exists t_mock_api;create table t_mock_api( api_desc varchar(500) not null comment '...原创 2019-09-27 21:31:44 · 358 阅读 · 0 评论 -
Linux安装FastDFS的全过程以及文件服务器开发过程
下载安装文件(1)FastDFS安装包(2)获取libfastcommon安装包(3)获取fastdfs-nginx-module安装包(4)获取nginx安装包获取完成最新安装包之后,上传到/opt/software目录下。安装FastDFS安装依赖yum -y install gcc-c++ perl安装libfastcommon类库tar -zxvf libfast...原创 2019-09-04 19:39:29 · 354 阅读 · 0 评论 -
前后端分离项目的nginx多个静态站点和反向代理实践
背景说明目前有以下几个项目:80(Vue项目首页)9090 (Vue项目管理端)8888(Vue项目用户端)7000(注册服务器)7010(网关)7011(系统模块微服务)7012(项目模块微服务)访问流程是调用网关,通过网关接口实现了转发到各个微服务,如xx:7010/module-service/user/info会调用7011微服务的接口多模块的Vue项目部署...原创 2019-08-08 10:01:05 · 2174 阅读 · 0 评论 -
前后分离项目中使用zuul作为网关,解决跨域问题
前后分离项目中使用zuul作为网关,解决跨域问题为什么需要跨域浏览器的同源策略来起到安全的作用。需要同协议,同域名/IP,同端口才能直接请求。这个协议的存在,我们无法正常跨域请求。利用cors跨域过程跨域请求会先发送一个预请求OPTIONS预请求成功后需要返回给前端一个成功的状态码预请求通过,进行真正的请求,实现跨域添加zuul的过滤器package com.fanl...原创 2019-07-27 19:06:13 · 1216 阅读 · 0 评论