合集-springboot(1)
摘要:为接口添加动态代理,不需要添加接口实现,通过定义FactoryBean的方式实现,将自定义业务在InvocationHandler接口实现即可 ImportBeanDefinitionRegistrar ImportBeanDefinitionRegistrar注入FactoryBean到Sprin
阅读全文
摘要:首先,后端项目springboot,前端项目VUE,两个都是运行在docker容器里,通过k8s进行编排的。 获取真实的客户端IP地址 一 需要在前端VUE的宿主nginx中,添加请求头规则 location /api { proxy_set_header Host $http_host; prox
阅读全文
摘要:kafka需要zookeeper的支持,我们可以使用docker-compose简单的部署一个环境,在部署时,kafka需要我们为它配置一个hostname,这个名称是每个kafka节点(broken)的名称,也是很容易被忽视的地方,通过kafka客户端工具可以看到你当前部署kafka时的hosts
阅读全文
摘要:@RequestParam中的Date类型的参数,如果前端给一个2001-01-01在后端默认是不认的,我们在后端需要对这种情况进行适配,我们可以通过@ControllerAdvice注解来拦截请求,然后对Date参数进行转换,最终实现我们的需求。 实现org.springframework.cor
阅读全文
摘要:实事上keycloak框架使用了freemaker进行页面部署,在页面上使用了vue进行了渲染,还是比较跟的上技术前沿的,只不过,keycloak没有使用spring框架,可能是因为它是redhat公司推出的产品吧。 依赖引用 <dependency> <groupId>org.springfram
阅读全文
摘要:非前后分离项目,后端页面想使用前端vue的mvvm思想,想使用iview强大的交互性,这时,可以使用thymeleaf+vue来实现,thymeleaf提供了后端页面引擎,vue支持在html页面上直接编译执行。 后端依赖 <dependency> <groupId>org.springframew
阅读全文
摘要:Disruptor Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。 Java内置队列的问题 介绍Disruptor之前,我们先来看一看常用的线程安全的内置队列有什么问题。Java的内置队列如下
阅读全文
摘要:早在很多年前,我曾经封装过关于.net unity aop的缓存[https://www.cnblogs.com/lori/p/5169420.html],面向方法的缓存,而如今,spring早已经集成了这个技术,并且得到了广大的应用。 添加依赖 <dependency> <groupId>org.
阅读全文
摘要:功能 某个rest接口是公开的,它的feign服务的接口需要授权 重写一个HttpServletRequestWrapper,实现模拟登录之后把header头进行填充 接口请求上下文里的token,通过Feign拦截器转给每个feign请求上下文 完成对feign接口的自动授权访问 # 重写Http
阅读全文
摘要:WildFly,原名 JBoss AS(JBoss Application Server) 或者 JBoss,是一套应用程序服务器,属于开源的企业级 Java 中间件软件,用于实现基于 SOA 架构的 Web 应用和服务。 WildFly 包含一组可独立运行的软件。 WildFly采用积极的方法进行
阅读全文
摘要:openfeign介绍 在微服务设计里,服务之间的调用是很正常的,通常我们使用httpClient来实现对远程资源的调用,而这种方法需要知识服务的地址,业务接口地址等,而且需要等他开发完成后你才可以去调用它,这对于集成开发来说,不是什么好事 ,产生了A业务与B业务的强依赖性,那么我们如何进行解耦呢,
阅读全文
摘要:jackson是springboot中集成的序列化方式,是默认的json序列化方式,当然你可以使用其它的序列化工具代替它,不过今天我们还是说一下它,使用jackson进行序列化一个类,然后再把它的JSON字符反序列化为它的接口对象。 现实 这种方式默认是不行的,因为接口不能被自动实例化 使用redi
阅读全文
摘要:scope授权思路 通过实现JsonSerializer抽象类的serialize方法来进行指定类型的序列化,在序列化中对持有ScopeSet注解的字段进行解析,当没有对象的scope时, 对字段不进行渲染,从而保护了字段资源。 之前的尝试MappingJackson2HttpMessageConv
阅读全文
摘要:在进行非WEB项目(Springboot)进行开发时,使用classLoader进行动态加载jar,并使用接口进行强类型转换是没有问题的,它们使用JVM下的URLClassLoader进行实现,而在基于tomcat的容器里使用它时,出现了类型无法找到的问题,原因如下: tomcat有个叫webApp
阅读全文
摘要:在使用keycloak集成springboot的过程中,对于需要授权访问的接口,它会跳到keycloak里进行登录,之前有个redirect_uri,登录成功后会跳回本客户端,而这个地址默认没有修改的地方,需要我们手动开发,这块不是很方便。 # 自定义redirect_uri 一 重写BeanPos
阅读全文
摘要:ConfigurationProperties主要用来对格式化配置信息进行整理,将多个相关的配置信息整理到一个类里,这个类可以被@ConfigurationProperties修饰,如果希望它启用,需要添加@Configuration这些注解,如果没有添加@Configuration注解,那么在启动
阅读全文
摘要:IOC,把控制反转到业务端,这句话没什么问题,在springboot框架里,对象的管理是通过spring ioc来实现的,而开发人员的开发原则里总是说“面向接口编程”,而为什么要面向接口却没几个人能说出来,今天在写一个基于redis的手动分布锁时,对这个面向接口和控制反转又有了一个体会。 底层代码更
阅读全文
摘要:annotation就是注解的意思,在我们使用的拦截器时,可以通过业务层添加的某个注解,对业务方法进行拦截,之前我们在进行统一方法拦截时使用的是execution,而注解的拦截我们使用@annotation即可,我们可以做个例子,比如搞个防止重复提交的注解,然后在拦截器里去写防止重复提交的逻辑就好了
阅读全文
摘要:对于springboot操作hbase来说,我们可以选择官方的依赖包hbase-client,但这个包的google类库很多时候会和你的项目里的google类库冲突,最后就是你的程序缺少类而无法启动,解决这个问题的方法很多,而最彻底的就是自己封装一个shade包,或者使用人家封装好的shade包,s
阅读全文
摘要:@ConditionalOnMissingBean,它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员。 代码演示 @Compon
阅读全文
摘要:审记功能在Jpa框架里出现的,主要针对实体的几个字段进行自动化的赋值,让业务人员可以把关注点放在业务上,对于公用的,有规则的字段,由系统帮我们去处理。 原理 通过spring aop功能实现对es仓库接口方法的拦截,然后在方法处理之前,为实体的这些公用字段赋值即可,我们使用了jpa里的一些注解,如@
阅读全文
摘要:对某个类型中的方法进行拦截,然后加入固定的业务逻辑,这是AOP面向切面编程可以做的事,在springboot里实现aop的方法也有很多,spring-boot-starter-aop或者aspectjweaver都是可以实现的,不过我们在实现之前,先来看一下aop里的几个概念。 概念 切面(Aspe
阅读全文
摘要:版本声明 Springboot,springcloud,spring secutity,spring ouath2都需要有明确的版本声明,对于不同版本的类库,实现上也有很大的区别,不同版本的授权是不能通用的。 项目定义 网关服务 gateway 授权服务 oauth,uaa 用户服务 system-
阅读全文
摘要:一个使用maven制作框架包时,会有一个主项目,然后它有多个子项目框架组成,很少一个工具包一个工程,像springboot,springcloud都是这种结构,主项目用来管理一些依赖包的版本,这对于框架型项目来说是很必要的,而对于业务项目来说,因为目前都是推荐使用微服务的轻量方式,所以不建议用多项目
阅读全文
摘要:不会自动转换string与date 主要是这个意思,前端提交的JSON里,日期是一个字符串,而对应后端的实体里,它是一个Date的日期,这两个在默认情况下是不能自动转换的,我们先看一下实体 实体 public class UserDTO { private String name; private
阅读全文
摘要:maven多项目启动 在多项目的maven项目里,你可以通过配置.idea/workspace.xml来配置多项目同时启动,这样方便于你的调试,不需要一个一个的启动了 workspace.xml文件里添加 <component name="RunDashboard"> <option name="c
阅读全文
摘要:在springboot里,推荐我们通过WebMvcConfigurer的派生类重写你的请求,你可以利用WebMvcConfigurer对http请求添加一些拦截器,addCorsMappings,addResourceHandlers,消息返回格式等等,需要注意的是,你需要使用@EnableWebM
阅读全文
摘要:jest是一批操作es的http api接口,你可以像使用普法方法一下操作es,在springboot2.3.0之前,JestClient是支持自动注入的,而在2.3.0之后,你必须为JestClient写一个组件类,通过注入组件类来使用jest,这一点有些麻烦了。 依赖包 <dependency>
阅读全文
摘要:上次回说了@SpringBootApplication里的scanBasePackages里来实现不同级别包的加载问题,而这次主要说一下ImportSelector来实现加载不同包的方法,事实上,在springboot里,所有的Enable开头的组件也是使用的这种方式来实现的。 nacos组件里的体
阅读全文
摘要:对于springboot来说,它会把当前应用程序所在的包装载到ioc容器里,让使用者可以直接Autowired注入它们,一般的项目结果是这样的,这个项目包下有main方法,它将会把nacosdemo这个包里面所有的bean都扫描出来,然后在程序启动时,nacosdemo里的bean就会被自动注册了。
阅读全文
摘要:上一讲说了nacos服务端的安装,并且输入命令进行发布配置和获取配置,这一次说一下如何在springboot里获取配置。 dataId的组成$-\({spring.profile.active}.\) 依赖包 <dependencies> <dependency> <groupId>org.spri
阅读全文
摘要:nacos是阿里推出的一套基于DNS和基于RPC服务发现与注册,动态配置中心管理为一体的组件,目前在阿里产品上大为使用,而它也加入了springboot的阵营,可以在springboot上直接使用它。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现
阅读全文
摘要:在用户登陆之后,我们一般会把用户登陆的状态和相关信息进行存储,把对应的token返回到客户端进行存储,下次请求过来时,系统可以通过token拿到当前这个用户的相关信息,这是授权通常的作法,而有时一些业务里,你存储的用户信息不是全局的,可能只是某几个接口会用户某些信息,而你把它存储起来就不是很合理;并
阅读全文
摘要:redis实现了对数据的缓存,在项目里一些字典数据,会话数据,临时性数据都会向redis来存储,而在springboot里对redis也有支持,一般来说多个线程共同使用一个redis实现是有线程安全的风险的,而每个实现一个线程又太浪费资源,无法控制线程数量是非常危险的,所以就出现了一些redis线程
阅读全文
摘要:CommandLineRunner接口可以实现任务的自动加载,当项目启动完后,就会自动去执行CommandLineRunner接口里的run方法,你可以实现多个CommandLineRunner的实例,使用order来控制执行的顺序! /** * 项目启动后自动运行的代码CommandLineRun
阅读全文
摘要:springboot开发微服务框架一般使用springcloud全家桶,而整个项目都是容器化的,通过k8s进行编排,而k8s自己也有服务发现机制,所以我们也可以抛弃springcloud里的eureka,而直接使用k8s自己的服务。 添加组件 注意点 1. application.name与k8s的
阅读全文
摘要:有些类库我们会放在本地resources目录,当然如果公用仓库里有它,并且是免费的,还是建议直接引用仓库里的,这样在版本更新上和源代码体积上都是有优势的,下面解决引用本地jar的方法。 资源文件 在pom里添加引用 pom里添加本地文件支持 这样,本地的jar包就算了引到项目里了。
阅读全文
摘要:使用maven进行构建项目时,有时会把公共对象和方法抽象在一个common公用项目里,而其它项目直接依赖它即可,而在common项目配置需要注意一下,因为springboot生成的jar默认是可执行的jar包,所以在其它子项目编译时,会因为引用common失败而导致当前项目不能成功编译,而只能去根项
阅读全文
摘要:当我们的项目里有多种数据源时,mysql,h2,mongodb,es等等,这时你需要为每种数据源添加自己的bean类,在bean里构建配置,而直接在yml里的配置往往会出现循环引用的问题。 有时,也会出现其它奇葩的问题,总之,当你的项目里数据源比较多时,通过配置文件+profile来管理它们更清晰,
阅读全文
摘要:事情是这样的,系统有这样一个需求,有一些单子供客户下载打印,做为凭证,而这些单子一般属于word格式的,里面的排版非常固定,只是上面的内容不同,这就属于word模板的范畴了,目前比较不好的操作word的组件就是aspose了,下面我来说一下它的使用方法。 word模板 主要使用了word里的域,然后
阅读全文
摘要:介绍 Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。 功能 Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。可以监控数据库访
阅读全文
摘要:概念 工作流产品使用activiti的算是比较多了,自带了一套UI界面,可以直接使用,用来设计流程,下面简单总结一下它的步骤: 1 设计模型 2 发布为流程,一个模型可以发布多个版本的流程 3 建立一个流程的实例和实例任务,一个流程可以建立多个并行的实例 4 对某个实例任务进行审批 5 可以查看实时
阅读全文
摘要:在gradle4.7以后对于加入依赖lombok方式发生变化,gradle4.7版本以前,可以直接如下引用: compile("org.projectlombok:lombok:1.18.2")或者compileOnly("org.projectlombok:lombok:1.18.2") 在gra
阅读全文
摘要:在使用spring框架时,默认情况下@RequestParam注解只到接受Get和Post请求参数 ,而对于Put来说默认是使用@ReqeustBody注解的,如果希望为Put也开启@RequestParam,需要添加过滤器实现。 @RequestParam 用来处理Content Type: 为
阅读全文
摘要:@Transactional注解是为方法添加事务块的意思,使用aop的技术动态为方法添加事务范围,在使用它时可以在类或者方法上添加,但在类上添加时需要注意一下影响的范围。 类中添加Transactional 相当于你的每个公共的方法都会被迫加上事务,这并不是一件好事,所以不建议这样干。 拦截器里调用
阅读全文
摘要:大叔推荐博客索引 k8s学习笔记目录 k8s~术语解释 k8s的yaml说明 springboot+k8s+抛弃springcloud.eureka k8s~k8s里的服务Service k8s~跨namespace的service相互访问 k8s~部署EFK框架 k8s~为服务添加ingress的
阅读全文
摘要:springboot开发微服务框架一般使用springcloud全家桶,而整个项目都是容器化的,通过k8s进行编排,而k8s自己也有服务发现机制,所以我们也可以抛弃springcloud里的eureka,而直接使用k8s自己的服务。 添加组件 注意点 1. application.name与k8s的
阅读全文
摘要:统一设计 maven很好的把项目整合在一起,在部署时,每个项目可以有自己的Dockerfile,在构建后把对应的jar包复制到Dockerfile的同级目录,使用使用统一的打包镜像和容器启动方法去执行就可以了。 需要大maven根项目添加插件 Dockerfile的统一内容 在src/main/do
阅读全文
摘要:高并发下的耗时操作 官方文档中说DeferredResult和Callable都是为了异步生成返回值提供基本的支持。简单来说就是一个请求进来,如果你使用了DeferredResult或者Callable,在没有得到返回数据之前,DispatcherServlet和所有Filter就会退出Servle
阅读全文
摘要:之前写了关于读取自定义配置的文章 "springboot~yml里的自定义配置" ,而今天主要说一下对复杂配置信息的读取方法,我们简单的配置用@Value注解就可以了,而结构复杂的一般使用@ConfigurationProperties来实现,下面说一下。 配置信息 开启ConfigurationP
阅读全文
摘要:springboot里连接elk里的logstash,然后写指定index索引的日志,而之后使用kibana去查询和分析日志,使用elasticsearch去保存日志。 添加引用 添加配置 指定配置 logstash配置索引 kibana里建立索引 通过kiban菜单去建立索引:Management
阅读全文
摘要:在mybatis和mybatis plus里,如果你的实体字段是一个枚举类型,而在数据表里是整型,这时在存储时需要进行处理,默认情况下,会把枚举的元素名称拼接到SQL语句里,而由于数据表是int类型,所以在插入等操作时,就会出现异常! 添加枚举处理器 MappedTypes(value = {Yes
阅读全文
摘要:aop是面向切面编程的意思,它可以需要先选择一些切入点,然后对这些切入点进行拦截,注入统一的代码逻辑,这也是解耦的一种方式,也是为了避免重复的代码,让开发人员把关注点放在业务上。 引用包 添加切入点 测试 当我们访问controller下的接口下,在控制台中将输出方法执行前和执行后的结果 感想 事实
阅读全文
摘要:参考文章:https://blog.csdn.net/qq_27828675/article/details/82466599 一 进行授权页 浏览器输入http://localhost:8081/oauth/authorize?response_type=code&redirect_uri=htt
阅读全文
摘要:"回到目录" 我的那些年(12)~公司技术转行,我也跟着转到java了 CTO换人了 微软技术栈不被认可经常被喷 技术统一向java转 换了mac book后,docker还是很占内存 学习springboot和springcloud 对微服务具体知识点的学习 封闭开发 CTO换人了 2018年初始
阅读全文
摘要:spring在启动时会自己把bean(java组件)注册到ioc容器里,实现控制反转,在开发人员使用spring开发应用程序时,你是看不到new关键字的,所有对象都应该从容器里获得,它们的 在放入容器时已经确定! 下面说一下三种注册bean的方法 1. @ComponentScan 1. @Bean
阅读全文
摘要:主要介绍三种,字符串配置,数组配置和带默认值的配置 字符串配置 数组配置 带默认值的配置 为三种类型的配置添加单元测试
阅读全文
摘要:简介 参考:https://springcloud.cc/spring cloud dalston.html _encryption_and_decryption_2 RSA非对称加密有着非常强大的安全性,HTTPS的SSL加密就是使用这种方法进行HTTPS请求加密传输的。因为RSA算法会涉及Pri
阅读全文
摘要:在springboot里,我们的task任务可以添加docker构建的功能,在gradle集成环境里,直接可以实现编译,测试,打包镜像的流水线作业,很是方便! 下面分享给大家,在gradle里添加docker镜像的构建功能。 添加依赖 添加Dockerfile 添加部署脚本
阅读全文
摘要:在springboot项目框架里,把一个项目两大模块,主项目main和测试项目test,而我们的测试项目根据功能又可以再分,比如可以有单元测试,集成测试,业务测试等等。 对于一个初学者来说,建立模块的方式需要我们掌握,网上的资料不多,很少讲到这个功能点,大叔在这里普及一下! springboot项目
阅读全文
摘要:参考:https://ultraq.github.io/thymeleaf layout dialect/Installation.html 依赖包 注意里面的thymeleaf layout dialec就是模板包,必须要安装的,我之前就坑在这里了 default.html模板页 注意在layou
阅读全文
摘要:今天说一下自己在项目中遇到的问题,然后总结一下Integer引用类型和int值类型 关于默认值 1. Integer默认为null 2. int默认为0 为什么把数据实体设计成Integer或者不是int 大叔认识,这样设计有助于我们区分这个字段是否被设置过,或者说是否被set过,而对于Intege
阅读全文
摘要:测试不应该访问外部资源 对于单元测试,集成测试里,如果被测试的方法中使用到了redis,你需要去模拟一个单机环境的redis server,因为只有这样,你的测试才是客观的,即不会因为网络和其它因素影响你测试的准确性! redis的内嵌版本embedded redis 它的源码在github上,大家
阅读全文
摘要:EventListener事件触发和监听器可以对代码解耦,在一些与业务无关的,通用的操作方法,我们可以把它设计成事件监听器,像通知,消息这些模块都可以这样设计。 事件源 事件处理程序 事件触发 直接测试事件处理程序 测试业务代码 由于@Service也是spring组件 ,所以它里面的事件处理程序也
阅读全文
摘要:@Getter & @Setter 生成getter和setter块 @Data注解 @Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。 通过官方文档,可以得知,当使用@Data
阅读全文
摘要:springboot~如何去掌握它 每讲40分钟 架构图 一 spirngboot介绍 环境搭建 jdk,gradle IDE工具选择intellij idea 源代码工具github的使用 issue的使用 分支的介绍与使用原则 第一个web api程序 二 服务发现与配置中心 eureka的介绍
阅读全文
摘要:网关在微服务里的角色 在微服务架构体系里,网关是非常重要的一个环节,它主要实现了一些功能的统一处理,包括了: 1. 统一授权 2. 统一异常处理 3. 路由导向 4. 跨域处理 5. 限流 实践一下 1 添加依赖 2 添加yml 3 添加实现代码 http拦截器,获取用户ID,为子服务进行传递 在主
阅读全文
摘要:大叔Springboot+微服务+持续集成和交付VIP(价格:5000元) springboot部分 微服务部分 持久集成和交付部分 springboot部分 1. 视频课(10讲) 2. 项目源代码(api restful风格) 3. 项目所需要的组件及说明 初始化 logger lombok c
阅读全文
摘要:问题起因 主要是使用mybatis作为ORM之后,返回的对象为Map,然后对于数据库的datetime,datestamp类型返回为时间戳而不是标准的时间,这个问题解决方案有两种,大叔分析一下: 在mapper的select里,使用mysql这些数据库的函数,dateformat进行转化,缺点,单元
阅读全文
摘要:单元测试有几点要说的 事实上springboot框架是一个tdd框架,你在进行建立项目时它会同时建立一个单元测试项目,而我们的代码用例可以在这个项目里完成,对于单元测试大叔有以下几点需要说明一下: 1. 单元测试的用例之间不要有相互依赖 2. 单元测试数据来源为本地,不要访问外部资源,外部数据库也是
阅读全文
摘要:在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如where in这种从数组里查询符合条件的集合里,需要在xml里进行特别的处理。 <update id="batchUpdate" parameterType="
阅读全文
摘要:事实起因 最近在ORM上使用了ibatis,感觉挺繁琐的,没有jpa来的直接,但项目非要用也没有办法,最近在进行开发过程中出现了一个问题Invalid bound statement (not found)意思是说,你的xml映射和你的mapper方法不一致,这种不一致大叔总结几点,如果你出现了这种
阅读全文
摘要:TDD是什么 TDD就是测试驱动开发,以测试用例为主导,去开发项目,业务代码该怎么写还是怎么写,在实现UI之前,可以先实现Test用例,通过test来实现对业务场景的模拟,最终让你的代码更稳定。 大叔认为tdd的作用 1. 代码更稳定,bug在发布之前被暴露出来 2. 持续集成更需要它,当你的项目通
阅读全文
摘要:缓存来了 在dotnet平台有自己的缓存框架,在java springboot里当然了集成了很多,而且缓存的中间件也可以进行多种选择,向redis, hazelcast都是分布式的缓存中间件,今天主要说一下后者的实现。 添加依赖包 dependencies { compile("org.spring
阅读全文
摘要:把一些公用方法,类型抽象到一个项目里,让其它项目依赖它,这种设计是一种解耦的体现,其实像springboot就是我们的一种依赖,他里面有很多子模块,用到哪个就添加哪个依赖即可,像redis,mongodb,elastic,solr等很多第三方库,都可以通过spring的依赖添加进来。 gradle没
阅读全文
摘要:起因 当前我们使用mongodb进行查询时,有时我们的条件是分块生成的,它可能来自一个列表里,我们的条件需要根据列表去返回数据,这里有个问题,如果遍历列表,然后每次都去从mongodb里查询数据 ,这种性能显然是不好的,我们需要把条件进行拼接,一次把数据查询出来! 分析 使用Criteria这个对象
阅读全文
摘要:期望 希望开发环境dev用mysql 单元测试使用本机的h2数据库 引入依赖 compile('org.springframework.boot:spring-boot-starter-data-jpa') runtime('com.h2database:h2') runtime('mysql:my
阅读全文
摘要:我们有时在进行开发过程中,使用jpa的@Query注解去选择多张表然后返回一个DTO对象,这个时候我们需要特殊处理一下,因为默认情况下,你的jpa代码是不认DTO对象的。 参考文章:https://smarterco.de/spring data jpa query result to dto/ e
阅读全文
摘要:jap是个全能仓储 jap把很多数据库访问都封装了,并且提交了默认的一切数据方法签名的约定,大家按着约定走,可以不写SQL语句,而如果比较复杂的情况,也需要写SQL,这里我们介绍一下查询和修改的实例方法,有一点要注意,==仓储的写操作是没有返回值==的。 商品仓储个性接口 controller中可以
阅读全文
摘要:实体与Dto自动赋值 在开发的过程中,实体之间相互赋值是很正常的事,但是我们一般的方法都通过set和get方法来进行的,如果要赋值的字段少那还行,但是需要赋值的字段超过10个,那就是个灾难,你会看到整屏代码中全是set和get方法。 1. 两个实体属性字段几乎完全相同 2. 两个字体有部分字段相同
阅读全文
摘要:springboot将项目源代码打包并发布到仓库 如果我们有一些类和方法是公用的,可以打开公用包,而这时使用默认的build方式都所有依赖都打进去,而且你当然项目的文件虽然在包里,但却在boot inc里,这里的文件不能被其它包识别,只是一大堆class文件,然后下面的方法,我们会生成一个后缀stu
阅读全文
摘要:回到占占推荐博客索引 最近写了不过关于java,spring,微服务的相关文章,今天把它整理一下,方便大家学习与参考。 java~springboot(2022之后)~目录索引 java~springboot(2022之前)~目录索引 IntelliJ IDEA~gradle环境配置 springb
阅读全文
摘要:API文档是前端与后端快速开发,减少沟通成本的必要条件,有一份完善的文档是很必要的,由通过测试来生成文档的好处就是:测试数据有了,测试返回结果有了,而且可以对这些字段进行说明,很清晰,在springboot框架里,去使用mockMvc文档生成时,需要有以下几个步骤,大叔总结了一下,分享给大家。 一
阅读全文
摘要:对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要关心服务端的URI,只需要知道它在eureka里的服务名称即可,同时你与服务端确定了服务方法的参数和
阅读全文
摘要:在微服务设计里,服务之间的调用是很正常的,通常我们使用httpClient来实现对远程资源的调用,而这种方法需要知识服务的地址,业务接口地址等,而且需要等他开发完成后你才可以去调用它,这对于集成开发来说,不是什么好事 ,产生了A业务与B业务的强依赖性,那么我们如何进行解耦呢,答案就是openfeig
阅读全文
摘要:对于单元测试来说,我们应该让它尽量保持单一环境,不要与网络资源相通讯,这样可以保证测试的稳定性与客观性,对于springboot这个框架来说,它集成了单元测试JUNIT,同时在设计项目时,你可以使用多种内嵌的存储工具,像mongodb,redis,mysql等等,今天主要说一下embedded-re
阅读全文
摘要:@Valid注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则,而在API接收数据时添加@valid关键字,这时你的实体将会开启一个校验的功能,具体的代码如下,是最基本的应用: 实体: Restful接口: 上面代码中,我们为请求体Request<DepartmentDto>添加了校
阅读全文
摘要:在spring框架里,为我们集成了很多校验注解,直接在字段上添加对应的注解即可,这些注解基本都是简单保留类型的,即int,long,float,double,String等,而如果你自己封装了新的类,那么如果要校验它,注解这块需要自己写一下,像money这个类型,如果希望对它进行校验,注解这块需要自
阅读全文
摘要:在java扩展包里,有这样一个包,它可以描述货币类型,它说币种和金额组成,可以应用在任何复杂的场合里,这个对象结构如下: 如果希望引用Money类型包,可以使用下面的包路径 对包进行更新,然后在代码中可以使用Money类型 在进行单元测试时,我们把这个对象作为请求体,在webapi里进行接收,这时出
阅读全文
摘要:这是一篇关系到四个知识点的文章,分别是java,docker,springboot和gradle,我们希望在java环境下,使用springboot框架,通过gradle去构建项目,然后把项目部署和运行在docker容器里! 注意的地方 开发过程 一 build.gradle文件 src/main/
阅读全文
摘要:"LindDotNetCore模块介绍" "大叔博客" LindDotNetCore相关模块介绍 [x] 全局都是依赖DI [x] 消息队列 [x] NoSql [x] Caching [x] 仓储 [x] 服务总线 [x] Solr [x] 调度 [x] 日志 [x] Asspect拦截组件 [
阅读全文
摘要:我们springboot项目有自己默认的配置文件,一般地由application.yml和bootstrap.yml组成,前者是模块的配置,后者是微服务的配置,后台比前者先被框架加载。 我们有时需要自己定义配置,可能不是简单的字符串,它可能是一个对象,对象里有具体的配置段,它也是applicatio
阅读全文
摘要:在使用springboot进行开发时,单元测试是必要的,当你建立一个spring项目时,它会为我们自己生成一个测试项目,当你的项目开始过程中,测试用例是同时要进行的,我们在进行WEB层的集成测试时,可以使用spring为我们提供的WebTestClient工具,非常方便,提供了基于restful的各
阅读全文
摘要:对于mongodb的内嵌对象的各种操作大叔在.net平台时已经说过,同时大叔也自己封装过mongo的仓储,使用也都很方便,而在java springboot框架里当然也有对应的方法,下面主要说一下,希望对刚接触mongodb的同学有所帮助! 一 测试DEMO的数据结构 其中它有一个内嵌的集合对象,a
阅读全文
摘要:说说springboot与大叔lind.ddd的渊源 Mongodb在Lind.DDD中被二次封装过(大叔的.net和.net core),将它当成是一种仓储来使用,对于开发人员来说只公开curd几个标准的接口即可,而在springboot框架里,它与大叔lind有些类似之处,同样是被二次封装了,开
阅读全文
摘要:JPA介绍 JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框
阅读全文
摘要:在springboot框架里进行项目开始时,我们在resource文件夹里可以存放配置文件,而格式可以有两种,properties和yml,前者是扁平的k/v格式,而后者是yml的树型结构,我们建议使用后者,因为它的可读性更强,如果现有是properties,也可以转换成yml格式,我们把prope
阅读全文
摘要:添加对应版本的包 在测试之前,它会根据你的操作系统去下载当前的mongodb,然后在宿主机上去跑它,可能第一次会比较慢 ! 添加测试脚手架类 添加测试DEMO类 测试如果通过,就出现pass 1的绿色标志 感谢各位阅读! 再次提醒,在测试之前,它会根据你的操作系统去下载当前的mongodb,然后在宿
阅读全文
摘要:对于IJ这个IDE工具来说,我们会安装一些插件来帮助我们更好的进行开发,像lombok就是一款不错的插件,使用注解的方式在项目编译时帮助我们生成代码,像getter,setter,tostring等等,它们一般都是一些重复的代码,而lombok就是帮助我们生成这些重复代码的,对于一个IJ的工具来说,
阅读全文
摘要:转了,非转了 只是项目需要,从.net到java,以后可以学习java的思想把它应用到.net上来,让咱们的.net越来越强大,springbool是一个强大的框架,几乎有了你想要的所有功能模块,大叔为什么感觉似曾相识,是因为lind.ddd就类似于springboot,可以说是一个精简版的spri
阅读全文