![](https://img-blog.csdnimg.cn/20190907133721715.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spring
文章平均质量分 60
Deniro Lee
这个作者很懒,什么都没留下…
展开
-
RocketMQ 事务消息示例分析
1 示例模式RocketMQ 事务消息示例包含一个生产者、消费者、NameServer 以及 Broker 服务,它们之间的关系如下:RocketMQ架构上主要分为四部分[^1]:Producer:消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。Consumer:消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的原创 2022-03-06 10:48:32 · 4659 阅读 · 0 评论 -
Seata XA 模式示例分析
文章目录1 下载示例2 示例结构3 业务服务 business-xa3.1 模块结构3.2 Controller 层3.3 Service 层3.4 stock Feign 客户端3.5 order Feign 客户端4 库存服务 stock-xa4.1 服务层 StockService4.2 数据源配置5 订单服务 order-xa5.1 服务层 OrderService5.2 account feign 客户端6 账户服务 account-xa6.1 服务层 AccountService7 测试7.原创 2022-03-06 10:40:52 · 1719 阅读 · 0 评论 -
使用 Spring JdbcTemplate 框架出现 oracle 数据源连接泄露问题的解决方法
1 问题应用运行一段时间之后,无法执行写入数据库操作。底层使用的是 druid 连接池。2 原因使用 Spring JdbcTemplate 框架执行 oracle sql 语句之后,发现逻辑连接没有释放:而同一套代码执行 PostgreSQL 语句之后,Spring JdbcTemplate 框架会主动释放逻辑连接:由于逻辑连接没有被释放,导致之后的线程在排队等待逻辑连接,从而导致线程阻塞。3 解决在执行语句后,主动回收连接:try { DataSource d原创 2021-12-11 09:23:47 · 947 阅读 · 0 评论 -
说说在 Spring Boot 中如何集成 JSP 标签库
在之前的文章中已经说过如何在 Spring Boot 中集成 JSP 视图技术。现在说说如何集成 JSP 标签库。 JSP 标签库可以是标准标签库,也可以是自定义标签库。1 标准标签库JSTL 是 JSP 标准标签库1,全称是 Java server pages standarded tag library。引入后,我们就可以使用 JSP 标准标签库,比如 fmt 格式化标签库。1.1 引入依赖包<dependency> <groupId>javax.servlet&原创 2021-09-11 14:29:32 · 1126 阅读 · 0 评论 -
说说在 Spring Boot 中如何集成 JSP 视图技术
文章目录1 加入 JSP 依赖包2 配置 resource3 配置视图解析器4 配置 webapp 文件夹与 web.xml5 新建 JSP6 配置依赖7 实现 Controller8 演示有的项目比较老,用的视图技术还是 JSP,现在要求把这些老项目都转为 Spring Boot 项目,这样可以打包成 Docker 镜像,然后部署到容器中进行管理。为了方便说明、验证。我们新建了一个 Spring Boot 项目。然后把 JSP 视图技术集成进来。具体步骤1如下:1 加入 JSP 依赖包首先在 p原创 2021-09-11 14:26:52 · 293 阅读 · 0 评论 -
说说如何在 logback 中打印debug日志,并可定义屏蔽某些包的debug日志
首先是在项目的 resources 文件夹内新建一个名为 logback-spring.xml 文件。然后在 root 节点设置日志级别为 debug,形如:<root level="DEBUG"> <appender-ref ref="console"/> <appender-ref ref="timeFileOutput"/> </root>运行结果:这样会输出项目中所有依赖包的 debug 日志。我们可以利用 l原创 2021-06-19 22:03:05 · 7204 阅读 · 0 评论 -
说说在 logback 中如何输出与主日志不同的独立业务日志文件
首先定义好 appender,然后定义一个 logger 节点,引用刚才定义的appender。logger 节点有以下三个属性,具体说明如下。完整示例如下:<appender name="interceptorTimeFileOutput" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--日志名,指定最新的文件名,其他文件名使用FileNamePattern --> <File>${原创 2021-06-19 21:59:30 · 356 阅读 · 0 评论 -
说说在 logback中如何配置日志的控制台输出与文件输出
通常情况下,日志是由一个抽象层 + 实现层的组合来搭建[i]。spring-boot-starter 其中包含了 spring-boot-starter-logging ,该依赖内容就是 Spring Boot 默认的日志框架 logback,所以实际开发中我们不需要直接添加该依赖[ii]。因为我们需要对日志进行更多控制,所以需要增加 logback配置。在项目的 resources 文件夹内新建一个名为 logback-spring.xml 文件。logback-spring.xml 只有在Spr原创 2021-06-19 21:53:19 · 2036 阅读 · 0 评论 -
说说如何使用 Spring jdbc 来执行存储过程
Spring jdbc 提供了jdbcTemplate 对象,该对象定义了 execute 方法可用于执行存储过程。该方法存在许多重载方式,我们使用的是execute(CallableStatementCreator csc, CallableStatementCallback action)。CallableStatementCreator 对象用于定义调用存储过程的入参与出参。CallableStatementCallback 对象用于定义执行以及接受存储过程的返回值。这两个对象都采用lambda表达原创 2021-05-30 08:56:38 · 709 阅读 · 0 评论 -
There is no PasswordEncoder mapped for the id “null“ 问题的解决方法
(1) 问题描述使用 postman 执行 POST请求获取访问令牌 URI(/oauth/token)时,响应返回:{ "error": "unauthorized", "error_description": "Full authentication is required to access this resource"}查看后台日志发现抛出There is no PasswordEncoder mapped for the id “null” at org.springfram原创 2021-05-01 08:33:06 · 4611 阅读 · 4 评论 -
Spring Boot 项目启动时,抛出无法访问javax.servlet.Filter找不到javax.servlet.Filter的类文件的解决方法
(1) 问题描述启动 Spring Boot 项目时,抛出该问题:双击该问题,跳转到 WebSecurityConfigurerAdapter 类:(2) 原因分析因为这个 WebSecurityConfigurerAdapter 类内部依赖了 spring-boot-starter-web,而我们的项目又没有引入这个包。(3) 问题解决在 pom.xml 中引入spring-boot-starter-web:<dependency> <group原创 2021-05-01 08:17:45 · 4065 阅读 · 1 评论 -
Spring 框架的 CommandLineRunner 以组件形式发布后无法执行问题的解决方法
1 问题描述写了一个组件,内部使用 @Component 与 @ConfigurationProperties 注解来读取 yml 格式的配置文件。因为需要一些初始化操作,所以实现了 CommandLineRunner 接口,并在 run() 方法来进行初始化工作。@Component@ConfigurationProperties(prefix = "xxx")public class DatasourceMapperConfig implements CommandLineRunner {…原创 2021-03-07 10:27:35 · 1903 阅读 · 0 评论 -
自主开发的、带有 @Component 的组件在Spring Boot 项目中不生效的解决方法
(1)问题描述开发了一套组件,以 jar 形式发布。然后在 Spring Boot 项目中使用 pom引用后,无法调用到在组件中用 @Component 注释的类。(2)原因分析默认情况下,@ComponentScan注解会扫描当前包及其所有子包中的组件。而 @SpringBootApplication 注解包含了@ComponentScan,所以 Spring Boot 框架会自动扫描 Spring Boot启动类当前包及其所有子包中的组件类。而我们的组件因为不在自动扫描范围内,所以无效。(3)问原创 2021-03-07 10:25:04 · 3853 阅读 · 4 评论 -
说说如何使用 Spring Cloud Config 搭建配置中心服务
(1)新建 Spring Boot 项目新建一个基于 Spring Boot 的 Maven项目模块,名为 app-config。(2)配置 pom.xmlpom 文件配置为:<?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"原创 2020-12-26 16:56:01 · 239 阅读 · 0 评论 -
说说 Spring Boot 的条件化配置 profile
因为部署环境的不同,应用所使用的配置参数也可能不同。比如开发环境与生产环境之间的配置参数就存在很大的区别。比如开发环境可能使用 H2 数据库,而在生产环境用的是 Oracle 数据库。虽然在生产环境可以使用环境变量来配置参数,但如果参数太多,就不怎么方便。更好的方式是使用 Spring profile,它是一种条件化配置机制, Spring Boot 启动时,会根据处于激活状态 profile 来加载相应的配置参数。profile /ˈproʊfaɪl/A representation of a原创 2020-10-23 20:11:55 · 438 阅读 · 0 评论 -
说说在 Spring Boot 中如何自定义与使用属性
Spring Boot 应用本身的属性值(比如每页记录数),一般做成自定义的应用属性,放置在 application.yml 中。(1)配置自定义属性在 application.yml 中,自定义一个名为 pageSize 的属性,用于存放 整个应用的 “每页记录数” 参数。app: data: pageSize: 30上面的这些配置都是自定义的,而且支持任意嵌套。(2)控制器层配置好自定义属性之后,就可以直接在业务的控制器层 Controller 使用这些属性。@Configu原创 2020-10-23 20:08:13 · 406 阅读 · 1 评论 -
说说在 Spring Boot 中如何整合与配置 log4j2
1 引入 log4j2首先打开 pom.xml ,然后排除掉 Spring Boot 2 所默认使用的日志组件 log-back,接着引入 log4j2:<!--log4j2--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> &原创 2020-10-10 20:42:52 · 568 阅读 · 0 评论 -
说说在 Spring Boot 中如何修改 Servlet 容器端口
最常见的 Servlet 容器就是 Tomcat 咯。Spring Boot 默认会使用嵌入式的 Tomcat 作为 Servlet 容器。1 指定端口号打开 application.yml 修改 Servlet 容器监听请求端口号:server: port: 8088这样重启之后, Spring Boot 项目就会运行在 8088 端口上。2 随机端口号如果把上面的 port 设置为 0,则表示使用随机端口号,Spring Boot 会任选一个可用的端口。server: port:原创 2020-10-10 20:41:41 · 621 阅读 · 0 评论 -
说说 Spring Boot 属性数据源
应用启动时,Spring 运行环境会从以下数据源中读取属性值,注入到相应的 Bean 中:JVM 变量操作系统环境变量命令行参数属性配置文件(Application.properties、Application.yml)Spring Boot 自动配置的 bean 都可以通过以上这些属性数据源进行配置。而一般我们会使用 application.yml来配置 bean 属性。yml 也叫 yaml,它是一种以数据为中心的配置文件格式。基本语法为:key:[空格]value。注意:冒号与 v原创 2020-10-10 20:34:00 · 211 阅读 · 1 评论 -
说说如何使用 Spring Security 保护 web 请求
利用 WebSecurityConfigurerAdapter 类的configure(HttpSecurity http) 方法,可以实现以下功能:只有满足特定条件的请求,才允许提供服务;自定义登录页;退出账户;预防跨站请求伪造。1 权限配置对 HTTP 请求路径进行权限配置。假设必须具有 ROLE_USER 角色的账户才能访问 /notice 与 /sms 路径;而其它路径无限制。具体配置代码如下: @Override protected void configure(Htt原创 2020-10-01 08:13:24 · 457 阅读 · 0 评论 -
说说如何使用 Spring Security 自定义账户权限体系
如果使用之前说过的基于 JDBC 的认证方案,那么必须遵循一定的规范,比如字段名名称限制等等。所以如果需要完全自定义,我们可以使用直接 Spring Data Repository。Craig Walls 举了这样一个示例,来说明如何自定义账户权限体系。1 定义账户实体类@Entity@Data@NoArgsConstructor(access = AccessLevel.PRIVATE, force = true)@RequiredArgsConstructorpublic class Us原创 2020-10-01 08:09:47 · 363 阅读 · 0 评论 -
说说 Spring Security 账户权限体系
Spring Security 为这套账户体系提供了多种方案,基于内存;基于 JDBC;基于 LDAP;自定义服务。不管使用哪种方法,都是通过覆盖 WebSecurityConfigurerAdapter 基础配置类中定义的 configure() 方法来实现的。1 基于内存方式@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter原创 2020-10-01 08:08:12 · 708 阅读 · 0 评论 -
Spring Security 概述
1 安装首先将 Spring Boot security starter 依赖包放入 pom.xml 中: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>当应用启动时,Spring Boot的自动配置功能原创 2020-10-01 08:06:58 · 152 阅读 · 0 评论 -
说说如何使用 Spring Data JPA 持久化数据
1 JPAJPA全称为Java Persistence API(Java持久层API),它是在 jdk 5中提出的Java持久化规范。它为开发人员提供了一种对象/关联映射工具,实现管理应用中的关系数据,从而简化Java对象的持久化工作。很多ORM框架都是实现了JPA的规范,比如:Hibernate、EclipseLink 等。1.1 Java 持久层框架Java 持久层框架访问数据库的方式分为两种。一种以 SQL 为核心,封装一定程度的 JDBC 操作,比如: MyBatis 框架。另一种是以 Jav原创 2020-09-26 09:25:04 · 1244 阅读 · 0 评论 -
说说如何在 Spring Boot 中使用 JdbcTemplate 读写数据
首先在 pom.xml 中引入依赖。<!--jdbc--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--h2--><dependency> <groupId>原创 2020-09-26 09:11:13 · 1646 阅读 · 0 评论 -
说说 Spring Boot 所支持的视图技术
Spring Boot 支持以下视图技术。视图技术Spring Boot 相关依赖FreeMarkerspring-boot-starter-freemakerGroovy Templatesspring-boot-starter-groovy-templatesJSP由 Servlet 容器提供支持Mustachespring-boot-starter-mustacheThymeleafspring-boot-starter-thymeleaf原创 2020-08-30 17:19:09 · 518 阅读 · 0 评论 -
说说 Spring MVC 的视图控制器
Spring MVC 标准控制器类的编程模型是这样的:控制器类使用了 @Controller 注解, 项目启动时,Spring 组件扫描功能自动发现并将其初始化为 Spring 应用上下文中的 bean ;可以在控制器类上使用 @RequestMapping 注解,定义好该控制器的基本请求模式;控制器类的具体方法都带有一个或多个标注了 @GetMapping 或 @PostMapping 注解的方法,这些注解用来指明该方法处理哪种类型的请求。如果一个控制器只处理请求转发,而不需要处理输入或填充模原创 2020-08-30 17:18:15 · 522 阅读 · 0 评论 -
说说 Spring MVC 的输入校验
1 JSR- 303Spring 支持 Java 的 Bean 校验 API( Bean Validation API, 也 被称为 JSR- 303)。JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。JSR-303 是JAVA EE 6 中的一项子规范,叫做原创 2020-08-30 17:17:24 · 239 阅读 · 0 评论 -
说说 Spring MVC 中 forward 与 redirect 之间的区别
forward(转发) 与 redirect(重定向) 是 servlet 提供的两种跳转方式。这两种跳转方式的具体区别如下表所述:forwardredirect地址栏forword是服务器内部的重定向,即服务器直接访问目标地址的 url,并把其中的内容作为响应结果返回给浏览器,所以浏览器的地址栏不会发生变化。服务器发送给浏览器一个 302 状态码,让其请求新的地址,所以地址栏中的地址会显示为新的地址。共享数据由于在服务器内部重定向的过程中,用的是同一个request,因原创 2020-08-30 17:16:33 · 625 阅读 · 0 评论 -
说说 Spring MVC 请求映射注解
Spring MVC 提供了以下这些请求映射注解:请求映射注解说明@RequestMapping通用的请求处理@GetMapping处理 HTTP GET 请求@PostMapping处理 HTTP POST 请求@PutMapping处理 HTTP PUT 请求@DeleteMapping处理 HTTP DELETE 请求@PatchMapping处理 HTTP PATCH 请求除了 @RequestMapping ,其它类型的注解本质原创 2020-08-30 17:15:30 · 786 阅读 · 0 评论 -
说说 Spring MVC 模型
Spring Boot Web 基于 MVC,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,它是一种软件设计典范,它用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。View(视图) - 视图代表模型包含的数原创 2020-08-30 17:14:34 · 300 阅读 · 0 评论 -
说说在 IDEA 中如何使用 DevTools 与 LiveReload 实现热部署(包括代码与静态资源)
1 配置 Intellij IDEA首先在 Intellij IDEA 中,开启项目自动构建选项:然后打开 Maintenance 选项卡,快捷键为 Ctrl + Alt + Shift + /:输入快捷键后,选择 Registry,进入注册表,找到 compiler.automake.allow.when.app.running,勾选它:这时 Java 代码发生变化时,ID...原创 2020-05-04 11:03:43 · 1127 阅读 · 0 评论 -
说说 Spring Boot 项目引导与测试原理
1 引导项目因为 Spring Boot 项目会以可执行 JAR 文件的形式来运行,所以 Spring Boot 项目会定义一个主类,主类中提供 main 方法,它会在 JAR 运行时被执行。这个主类以注解的形式绑定 Spring 框架,完成 Spring 基础配置。import org.springframework.boot.SpringApplication;import org.s...原创 2020-05-04 08:53:23 · 385 阅读 · 0 评论 -
说说使用 Spring Initializr 构建 Maven 项目的原理
Spring Initializr 实际上是一个提供 REST API 服务的 Web 应用,使用它我们能够生成一个基于 Spring 框架的项目结构骨架。还可以利用它添加我们所需要的组件或第三方框架依赖库。比如在下图中就可以选择所需要的依赖库:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P0QleiRb-1588469415022)(https://uploa...原创 2020-05-03 09:30:38 · 1031 阅读 · 0 评论 -
说说如何在 Spring Boot 中配置 HTTPS 服务
通过简单配置,服务器就可以提供 HTTPS 服务啦。首先使用 JDK 的 keytool 工具来创建一个 keystore,命令如下:keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA该工具会询问几个与名称相关的问题,关键是要记住所输入的密码哦๑乛◡乛๑把生成的 mykeys.jks 拷贝到项目根目录下。打开...原创 2020-01-31 16:51:32 · 1889 阅读 · 0 评论 -
Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 问题的解决方法
环境为:Spring Boot2 + Gradle5。使用了 spring-boot-starter-data-jpa 依赖并配置了 MySQL 驱动与相关用户名、密码等配置。启动时抛出以下异常:Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hi...原创 2020-01-05 16:11:11 · 8633 阅读 · 0 评论 -
Spring Boot2 + Gradle5 + Log4j2 启动出现 StackOverflowError 问题的解决方法
在 build.gradle 中配置好 log4j2 后,bootRun 启动项目,抛出以下异常:Exception in thread "main" java.lang.StackOverflowError at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194) at org.apache.loggin...原创 2020-01-05 15:26:03 · 1186 阅读 · 0 评论 -
说说 Spring Boot 的条件化注解
SpringBoot 定义了许多条件化注解,可以将它们用到配置类上,以说明生效条件。条件化注解生效条件@ConditionalOnBean配置了特定的 Bean。@ConditionalOnMissingBean没有配置特定的 Bean。@ConditionalOnClassClasspath 里有指定的类。@ConditionalOnMissin...原创 2019-12-15 12:06:53 · 493 阅读 · 0 评论 -
说说 Spring Boot 属性配置源的加载顺序
Spring Boot 会按照下列优先级顺序,加载配置信息。命令行参数java:comp/env 里的 JNDI 属性JVM 系统属性操作系统环境变量随机生成的带 random.* 前缀的属性(在设置其他属性时,可以引用它们,比如 ${random.long} )应用程序以外的 application.properties 或者 appliaction.yml 文件打包在应用程序...原创 2019-12-01 17:51:21 · 336 阅读 · 0 评论 -
说说如何管理 Spring Boot 中的起步依赖
Spring Boot 起步依赖的功能是:我们只要在构建文件中指定我们所需要的功能,构建程序就会引入相应的依赖包。它就像是一个 Maven 项目对象模型( Project Object Model , POM ),其内部定义了对其他库的传递依赖,这些东西加在一起就可以支持我们所需要的某项功能。1 基本用法假设我们在 Gradle 文件中,指定了以下功能(JPA 与 Thymeleaf): ...原创 2019-11-24 11:20:50 · 315 阅读 · 0 评论