Spring Boot
文章平均质量分 75
lang20150928
stay hungry stay foolish
展开
-
通过脚本解压SpringBoot的Fat压缩包并替换内容
【代码】通过脚本解压SpringBoot的Fat压缩包并替换内容。原创 2024-07-04 15:16:26 · 137 阅读 · 0 评论 -
yaml复杂案例
超级复杂的yaml编写原创 2023-02-09 15:42:32 · 124 阅读 · 0 评论 -
关于分布式微服务中的跨域问题案例
通常来说,解决跨域问题需要在服务上添加几个头信息。最简单的办法是在过滤器中指定*来允许所有的请求。不过这样会有一些限制。原创 2022-08-30 11:41:10 · 110 阅读 · 0 评论 -
ParameterizedTypeReference使用
They also enable RestTemplate to read an HTTP response to a generic type (e.g. List), using a ParameterizedTypeReference, a new class that enables capturing and passing generic type info.原创 2022-08-30 10:11:43 · 4422 阅读 · 0 评论 -
gradle构建工具学习系列–005SpringBoot项目
gradle构建工具学习系列首先从官方下载一个SpringBoot项目git clone https://github.com/spring-guides/gs-rest-service.git在这个项目的complete目录下是一个完整的SpringBoot项目,同时支持gradle构建和maven构建。在导入到IDEA之前需要先修改使用的gradle版本(保证不与IDEA冲突)。这里选择版本为6.8.1,因为Spring Boot插件最低需要这个版本。修改之后如下所示#Sat D.原创 2021-12-18 20:40:26 · 932 阅读 · 0 评论 -
SpringBoot项目中动态切换数据源创建SqlSessionFactory实例
在有些项目当中,需要多个数据源,甚至是不同类型的数据库,但是想公用MyBatis的接口以及xml资源。此时可以根据数据源动态创建新的SqlSessionFactory实例,而不是在启动过程中创建的单例。对应的代码如下,主要有两点大体逻辑直接从org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration#sqlSessionFactory中拷贝而来(这样可以共用在配置文件中针对MyBatis的各种配置)需要修改org.mybatis.spr原创 2021-11-11 18:42:12 · 3155 阅读 · 8 评论 -
Logback学习系列(三) - Appender初探
Logback学习系列前面学习了Logback中Logger的name以及level相关的知识,结论如下Logger nameAssigned levelEffective levelrootDEBUGDEBUGXINFOINFOX.YnoneINFOX.Y.ZnoneINFO effective level q level of request p .原创 2021-08-14 18:37:04 · 240 阅读 · 0 评论 -
SpringBoot2整合SpringSecurity+Swagger3(源码分析七)
SpringBoot2整合SpringSecurity+Swagger3系列本章继续介绍Spring MVC的自动配置。在默认情况下,包含以下这些BeanContentNegotiatingViewResolver 和 BeanNameViewResolver这两个类都是属于ViewResolver(视图解析器)的范畴,所谓的ViewResolver就是根据名称解析为对应的View对象的工具。对应的接口只有一个方法public interface ViewResolver { View r.原创 2021-08-08 23:11:37 · 374 阅读 · 0 评论 -
SpringBoot2整合SpringSecurity+Swagger3(源码分析六)
SpringBoot2整合SpringSecurity+Swagger3系列上一章当中,在登录成功之后,Spring Security将请求进行转发。路径为/。新的请求经过Spring Securtiy过滤器链的时候,首先在SecurityContextPersistenceFilter过滤器当中通过session获取到SecurityContext实例,而这个实例当中包含了认证好了Authentication实例,所以在最后也是最重要的FilterSecurityInterceptor过滤器当中不需.原创 2021-08-07 22:57:40 · 887 阅读 · 0 评论 -
SpringBoot2整合SpringSecurity+Swagger3(源码分析五)
SpringBoot2整合SpringSecurity+Swagger3系列首先开启Security日志logging.level.org.springframework.security.web=debug浏览器访问http://localhost:8080/swagger-ui/index.html,通过Spring Security的过滤器,对应的日志如下所示(从侧面印证了Spring Security是基于Filter的) o.s.security.web.FilterChainPro.原创 2021-08-02 21:18:50 · 869 阅读 · 0 评论 -
SpringBoot2整合SpringSecurity+Swagger3(源码分析四)
SpringBoot2整合SpringSecurity+Swagger3系列Spring Securtiy的主要功能是通过Filter来实现的,更准确的说,是通过过滤器名称为springSecurityFilterChain的DelegatingFilterProxy来实现的。Proxy for a standard Servlet Filter, delegating to a Spring-managed bean that implements the Filter interface. S.原创 2021-08-01 20:54:02 · 328 阅读 · 0 评论 -
SpringBoot2整合SpringSecurity+Swagger3(源码分析三)
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter当WebSecurityConfigurerAdapter类型Bean创建的过程中,会进行自动注入操作。以下方法执行Spring容器对象的注入操作,注册Spring容器对象的同时,会获取ObjectPostProcessor(用于一个对象在Spring容器中的初始化操作,在适当时机调用Aware、afterPropert原创 2021-07-31 22:34:34 · 445 阅读 · 0 评论 -
springBoot2整合SpringSecurity+Swagger3(源码分析二)
SpringBoot2整合SpringSecurity+Swagger3系列在一章当中,已经学习到TomcatStarter在Tomcat启动过程中的关键作用 - 执行收集到的ServletContextInitializer的启动作用。其中主要包含三个,一个是在创建Tomcat的时候传入的一个匿名的ServletContextInitializer,一个是用于处理Session和Cookie的,还有一个是用于设置初始化参数的。后面两个都比较简单,本质还是属于Servlet的范畴,而第一个呢?其实第一个是原创 2021-07-30 20:55:59 · 350 阅读 · 1 评论 -
SpringBoot2整合SpringSecurity+Swagger3系列
系列文章目录SpringBoot2整合SpringSecurity+Swagger3SpringBoot2整合SpringSecurity+Swagger3(源码分析一)原创 2021-07-29 14:48:32 · 358 阅读 · 0 评论 -
SpringBoot2整合SpringSecurity+Swagger3
创建一个Maven项目并引入相关依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven原创 2021-07-28 22:42:28 · 329 阅读 · 0 评论 -
SpringBoot2整合SpringSecurity+Swagger3(源码分析一)
Tomcat容器启动org.apache.catalina.util.LifecycleBase#startInternal,根据当前Spring工厂创建一个ServletContextInitializerBeans对象(其实就是收集各种Servlet元素)@SafeVarargspublic ServletContextInitializerBeans(ListableBeanFactory beanFactory, Class<? extends ServletContextIniti原创 2021-07-28 22:32:55 · 383 阅读 · 2 评论 -
Docker发布Spring Boot项目
添加插件<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <!--将插件绑定在某个phase执行--> <executions> <execution>原创 2021-06-07 15:02:30 · 99 阅读 · 0 评论 -
为什么要使用微服务
Spring微服务实战为什么要使用微服务我们正处于历史的拐点,现代社会的几乎所有方面都可以通过互联网连接在一起。任何一个公司,都有可能接触到全球的客户,客户的增长同样带来了挑战。这些挑战意味着以下几点正在影响开发人员思考构建应用程序的方式:复杂度上升,高并发与单个数据库通信并且不与其他应用程序集成的孤立程序已经不再是常态,如今,应用程序不仅需要与多个位于公司数据中心内的服务和数据库通信,还要通过互联网与外部服务提供的服务和数据进行通信。客户期望更快速的交付客户不再希望等待软件包的下一次年度发布原创 2021-04-20 20:08:18 · 179 阅读 · 0 评论 -
Spring微服务实战
微服务初探本系列的版本如下所示 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId>原创 2021-04-20 18:39:15 · 94 阅读 · 0 评论 -
微服务初探
什么是微服务 微服务是一个小的、松耦合的分布式服务。微服务允许将一个大型的应用分解为具有严格职责定义的便于管理的组件。在思考微服务时,一个需要信奉的重要概念就是:分解和分离应用程序的功能,使它们完全彼此独立。微服务架构具有以下特征: 应用程序逻辑分解为具有明确定义的职责范围的细粒度组件,这些组件互相协调提供解决方案 微服务利用其小、独立和分布式的性质,使组织拥有明确责任领域的小型开发团队。这些团队可以为同一个目标工作,如交付一个应用程序,但是每个团队只负责他们在做的服务。 每个组件都有一个小的.原创 2021-04-11 21:56:36 · 164 阅读 · 0 评论 -
SpringBoot整合activiti5-外置表单
系列文章目录(springboot整合activiti5)所谓的外置表单方式,就是先把表单内容写好并保存为.form模板文件,然后配置流程中每个节点的Form Key属性指定这个模板文件。创建start.form<table border="0" cellpadding="2" cellspacing="1" style="width:100%"> <tr> <td nowrap align="right" width="13%">费用</td原创 2021-03-26 22:49:35 · 557 阅读 · 0 评论 -
SpringBoot整合activiti5-内置表单
系列文章目录(springboot整合activiti5)在web开发中的表单,可以理解为yoghurt交互的重要入口,用户通过表单输入,然后进行流程交互。Activiti提供了多种类型的表单,比如内置表单、外置表单和业务表单。其实在前面的章节中,我们接触到的都是内置表单,这是Activiti提供的一种快速方式生成的表单,通过Activiti内置的多种表单元素,就可以开发出呆流程管理的表单管理系统。<?xml version="1.0" encoding="UTF-8"?><defi原创 2021-03-26 22:02:57 · 434 阅读 · 0 评论 -
SpringBoot整合activiti5-流程部署
系列文章目录(springboot整合activiti5)在Activiti中,定义了多种资源,其中*.bpmn和*.bpmn20.xml都是流程定义文件,这两种格式都可以被系统识别并进行解释,但是目前最新版本的Activiti Designer保存的文件都是*.bpmn,而*.png指的是流程定义文件的图片描述,图片内容和流程定义文件描述一致,可以设置在Activiti Designer保存时,同时自动保存一个同名的图片文件。 *.form为表单文件,*.drl为规则定义文件。Activiti提供了多原创 2021-03-26 17:57:55 · 1120 阅读 · 0 评论 -
系列文章目录(springboot整合activiti5)
系列文章目录SpringBoot整合activiti5-项目搭建SpringBoot整合activiti5-用户SpringBoot整合activiti5-组SpringBoot整合activiti5-登录与第一个流程原创 2021-03-26 10:33:19 · 365 阅读 · 0 评论 -
SpringBoot整合activiti5-用户
在控制层创建UserController用于用户的增删改查package com.xquant.platform.test.activiti.controller;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.activiti.engine.IdentityService;import org.activiti.engine.identity.Group;import org.ac原创 2021-03-26 10:16:12 · 273 阅读 · 0 评论 -
SpringBoot整合activiti5-项目搭建
数据库准备工作登录activiti官方网站:https://www.activiti.org/在底部找到版本Version 5打开之后再点击下载地址进入地址https://www.activiti.org/get-started针对下载后的文件解压,如下图所示在activiti-5.22.0\database\create目录下找到对应数据库的脚本,比如mysql的这三个脚本中的第一个是创建engine相关的数据表,第二个是创建history相关的数据表,第三个是创建identity原创 2021-03-26 10:03:14 · 860 阅读 · 1 评论 -
springboot整合activiti5-登录与第一个流程
SpringBoot整合activiti使用maven,对应的依赖如下所示<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&g原创 2021-03-25 20:53:48 · 276 阅读 · 0 评论 -
动态数据源循环依赖问题
假如在项目中定义动态数据源,以下配置中DynamicDataSource是org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource的子类 @ConfigurationProperties("spring.datasource.source") @Bean public DataSource sourceDataSource() { return DruidDataSourceBuilder原创 2020-12-25 15:37:29 · 2575 阅读 · 3 评论 -
EnableLoadTimeWeaving的一个流程
文章目录 EnableLoadTimeWeaving EnableLoadTimeWeaving EnableLoadTimeWeaving @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(LoadTimeWeavingConfiguration.class)public @interface EnableLoadTimeWeaving { /** * Whether..原创 2020-12-20 15:40:07 · 1245 阅读 · 1 评论 -
MyBatis工作流程-与Spring整合
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段MyBatis工作流程-与Spring整合文章目录系列文章目录 前言与MyBatis相关的Beanbean实例化的流程1. Sql原创 2020-12-19 16:12:11 · 197 阅读 · 1 评论 -
分布式秒杀技术学习(2) - 产品查询
文章目录前言一、秒杀流程1. 大致秒杀流程2. 数据库准备3. 实体类、DAO层二、查询商品1.直接查询数据库2. 使用redis缓存总结前言在上一章当中,我们完成了环境的搭建。从这章开始,我们一步一步来实现秒杀业务的代码编写。一、秒杀流程1. 大致秒杀流程整个秒杀的流程如下:查询商品,如果商品不存在,当然直接秒杀失败如果商品存在,则要查询商品的库存并进行预扣提交订单,提醒用户秒杀成功并付款付款成功,秒杀成功入库并结束付款失败,秒杀库存+1,秒杀失败在编码的过程中,需要注意后面原创 2020-10-23 11:19:58 · 121 阅读 · 0 评论 -
分布式秒杀技术学习(1) - 项目准备搭建
文章目录前言一、环境准备1. 搭建redis服务器2. 搭建mysql数据库3. 创建maven项目4. 参数配置5. 创建配置类、启动类二、项目部署和压测1.部署2.压测总结前言在开始秒杀业务代码编写之前首先需要准备一些环境。比如redis环境,项目依赖等等一、环境准备1. 搭建redis服务器此处直接使用docker来准备一个redis服务器docker run -d --name redis -p 6379:6379 redis --requirepass "123456"运行以原创 2020-10-22 14:57:54 · 153 阅读 · 0 评论 -
IDEA发布Spring Boot项目到docker
在IDEA中添加docker插件首先下载插件docker修改docker服务器的配置文件,保证端口2375可以通过外部进行访问vim /lib/systemd/system/docker.service重启IDEA之后,在setting下搜索docker,在docker选项中添加如下信息tcp://191.168.1.15:2375,其中191.168.1.15为目标docker所在的主机IP,另外2375是对应的端口。过一会,会在下面显示Connection successful。原创 2020-08-20 16:27:06 · 219 阅读 · 0 评论 -
Conditional模式下注册Bean的顺序问题
我们知道在SpringBoot中提供了很多的Conditionalxxx的注解,使用方法参考博客:Spring Boot的自动配置是啥?Auto-configuration?首先想一下,为什么我们需要这种的注解存在呢?因为选择性问题。所以程序不仅仅是顺序执行,还有很多的if-else,其实理解Conditionalxxx就是if-else,只是针对的场景就是适合某种条件才注册某个bean。尤其做公共组件,必须满足各种使用者不同的需求。现在有如下这样一个类package com.example.con原创 2020-08-08 20:03:54 · 2422 阅读 · 1 评论 -
Spring Boot的自动配置是啥?Auto-configuration?
提到Spring Boot,大家经常会说到零配置,或者说开箱即用,我们不需要像Spring早期时代需要一个bean一个bean的配置,现在只需要导入一个jar包,然后相应的bean就帮你注册好了。非常方便。如果你在公司开发公共组件,或者做开源软件,你可能也想让自己开发的项目开箱即用,那该怎么操作呢?那么首先我们来学习一个英语单词,Auto-configuration,Auto是自动的意思,而configuration是配置的意思,使用过Java方式注册bean的总不会不认识这个单词吧!@Configur原创 2020-08-08 16:40:13 · 1481 阅读 · 1 评论 -
@Bean注册Bean,你有多了解?
doCreateBean-> createBeanInstance/** * Instantiate the bean using a named factory method. The method may be static, if the * mbd parameter specifies a class, rather than a factoryBean, or an instance variable * on a factory object itself configure.原创 2020-08-07 17:28:17 · 815 阅读 · 0 评论 -
@Configuration注册器ConfigurationClassBeanDefinitionReader
// Read the model and create bean definitions based on its content if (this.reader == null) { this.reader = new ConfigurationClassBeanDefinitionReader( registry, this.sourceExtractor, this.resourceLoader, this.environment, this.importBeanNameGen原创 2020-08-05 17:59:28 · 275 阅读 · 0 评论 -
注册Bean方式之@Import源码分析
// Process any @Import annotationsprocessImports(configClass, sourceClass, getImports(sourceClass), true);收集Import类比如对于以下类/** * Configuration to import the {@link BootstrapImportSelector} configuration. * * @author Spencer Gibb */@Configuration@原创 2020-08-04 17:39:37 · 339 阅读 · 0 评论 -
Spring Cloud Alibaba 学习(4)- 客户端使用nacos config
首先参考博客搭建SpringCloudAlibaba小项目:https://blog.csdn.net/m0_37607945/article/details/107705904以下采用上面博客中的spring-cloud-alibaba-consumer项目进行讲解在项目中引入依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-a原创 2020-08-03 11:43:02 · 4584 阅读 · 0 评论 -
Spring Coud Alibaba中nacos注册的源码解析
在Spring Cloud Alibaba中使用nacos作为服务注册组件,对应客户端首先需要引入依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>然后在启动类上添加注解@EnableDiscoveryCli原创 2020-07-31 17:00:23 · 638 阅读 · 0 评论