首页
分类
后端开发
数据库
前端开发
学习笔记
错误合集
标签
Java
MySQL
MongoDB
Linux
IDEA
归档
海尔经典面试题
Linux清理磁盘空间
MySQL查询结果输出到文件
MongoDB数据处理
瞬间
留言板
友情链接
Java学习笔记
Java博客
累计撰写
66
篇文章
累计创建
22
个标签
累计收到
12
条评论
栏目
首页
分类
后端开发
数据库
前端开发
学习笔记
错误合集
标签
Java
MySQL
MongoDB
Linux
IDEA
归档
海尔经典面试题
Linux清理磁盘空间
MySQL查询结果输出到文件
MongoDB数据处理
瞬间
留言板
友情链接
Java学习笔记
目 录
CONTENT
以下是
后端开发
相关的文章
2024-12-10
Spring Boot 重试机制@Retryable
**摘要(198字):** `@Retryable` 是 Spring Retry 提供的注解,用于在方法抛出指定异常时自动重试,支持配置最大重试次数、延迟策略和异常类型。`@Recover` 用于处理重试失败后的异常,实现恢复逻辑,可与 `@Retryable` 配合使用,分离重试与恢复逻辑。多个 `@Retryable` 方法可在同一类中定义,各自拥有独立的 `@Recover` 方法,通过异常类型和方法命名匹配对应关系。若未指定 `value`,默认重试所有异常。`@Recover` 方法需与 `@Retryable` 方法抛出的异常类型一致,Spring 通过方法参数类型和命名进行匹配,支持多方法共享相同异常类型但各自独立恢复。
2024-12-10
22
0
0
后端开发
2024-09-09
SpringBoot多数据源集成——MongoDB
本文介绍了在Spring Boot项目中实现根据业务条件动态切换MongoDB数据源的完整方案。首先通过`spring-boot-starter-data-mongodb`引入依赖,并在配置文件中定义多个数据库(如`default`和`csfa`)。通过`MongoParamsConfig`读取配置,`MongoConfig`类创建多个`MongoTemplate`实例,支持用户名密码认证。为避免保存`_class`字段,扩展了`MappingMongoConverter`。动态切换数据源可通过手动设置`ThreadLocal`标识,结合`DynamicMongoTemplate`选择对应模板;或通过AOP切面自动切换,实现无侵入式数据源切换。针对`MongoRepository`的自定义方法无法通过AOP生效的问题,提出了两种解决方案:一是直接使用`MongoTemplate`;二是创建自定义接口及实现类,继承`MongoRepository`,实现动态数据源调用。该方案适用于需多库动态查询的复杂业务场景,兼顾灵活性与可维护性。
2024-09-09
76
0
7
后端开发
数据库
2024-08-31
SpringBoot多数据源集成——MySQL
本文介绍了在Spring Boot项目中实现基于条件动态切换MySQL数据库的完整方案。通过配置多个数据源(如default、csfa),并使用`AbstractRoutingDataSource`结合`ThreadLocal`实现数据源动态路由。配置包括Maven依赖、`application.yml`中多数据源定义、`DataSourceConfig`类中通过`@ConfigurationProperties`加载数据源并构建`DynamicDataSource`。为避免循环依赖,需添加`@Lazy`注解,为指定默认数据源需使用`@Primary`。提供三种切换方式:手动切换、注解+AOP自动切换、拦截器自动切换。注解方式支持类/方法级别指定数据源,AOP切面需注意执行顺序(`@Order(-1)`)并处理事务嵌套问题。拦截器可从请求头获取`bus-tab`动态设置数据源,实现无侵入式切换。三种方式可组合使用,灵活满足不同场景需求。此外,也提及可使用Apache ShardingSphere实现更高级的动态数据源管理。
2024-08-31
29
0
3
后端开发
数据库
2024-06-04
try-catch 到底写在循环里面好,还是外面好?大部分人都会答错!
关于`try-catch`写在循环内还是外,没有绝对优劣,需结合业务场景选择。写在循环外,若某条数据异常则整个循环终止,适合事务性场景或需整体回滚的业务;写在循环内,可隔离异常不影响其他数据处理,适合容忍部分失败的场景。但循环内频繁使用`try-catch`会降低效率,尤其异常频发时。阿里巴巴《Java开发手册》也指出异常处理开销大,应避免无意义的循环内异常捕获。因此,应根据实际需求权衡:如需保证数据一致性或整体成功则放外;如需容错、部分失败不影响整体则放内,且可结合异常类型(如超时)设置阈值强制退出,提升系统健壮性与效率。
2024-06-04
36
0
2
后端开发
2023-02-13
equals 和 == 的区别
在Java中,`a == b` 和 `a.equals(b)` 的区别主要在于比较方式:`a == b` 比较的是对象的引用(即内存地址),只有当两个引用指向堆中同一个对象时才返回 `true`;而 `a.equals(b)` 比较的是对象的内容,通过调用 `equals` 方法实现逻辑相等性判断。对于自定义类,通常需要重写 `equals` 方法以实现基于属性值的比较。例如,两个 `String` 对象内容相同但引用不同,`==` 返回 `false`,而 `equals` 返回 `true`。此外,重写 `equals` 时一般需同步重写 `hashCode`,确保对象在哈希表等集合中行为一致。
2023-02-13
27
0
0
后端开发
2022-12-22
HTTP状态码
HTTP状态码是服务器在响应客户端请求时返回的三位数字代码,用于指示请求的处理结果。状态码分为五类:1xx(信息响应)、2xx(成功响应)、3xx(重定向)、4xx(客户端错误)和5xx(服务器错误)。常见状态码包括200(请求成功)、301(永久重定向)、404(资源未找到)和500(内部服务器错误)。状态码帮助浏览器和开发人员理解请求执行情况,优化用户体验和网站维护。例如,304表示资源未修改,可利用缓存;403表示服务器拒绝访问;503表示服务暂时不可用。通过状态码,可以精准定位问题,提升系统稳定性和响应效率。
2022-12-22
14
0
0
后端开发
前端开发
2022-12-20
优化SpringBoot项目启动时间和内存占用
作者使用Spring Cloud Alibaba搭建了包含7个微服务的项目,部署在2C4G的阿里云服务器上,采用Docker部署Spring Boot fat jar镜像。每个微服务默认占内存约500M,加上Nacos、Redis、Sentinel、RocketMQ、ELK等中间件,内存压力巨大,仅部署4个微服务便内存不足。为此,作者尝试通过JVM参数优化(如-Xms128m、-Xmx128m、-Xss256k等)将内存占用降至100~200M,但未达预期的几十M目标。经调研,作者计划采用Spring Native技术以实现更低内存占用和更快启动速度,其官方示例镜像仅50M,但构建时间较长(约2分钟),且该技术尚处快速迭代阶段,暂不推荐用于生产环境。文章未完待续。
2022-12-20
36
1
1
后端开发
2022-12-09
基于SpringBoot拦截所有接口类及实现类中方法上面的自定义注解
本文介绍了在Spring Boot中使用自定义注解同时拦截接口方法和实现类方法的实现方案。通过定义`@Ax`注解、创建`AxMethodPointcutAdvisor`匹配切入点、实现`AxInterceptor`拦截器,并注册`DefaultAdvisorAutoProxyCreator`,实现了对注解方法的统一拦截。关键在于`DefaultAdvisorAutoProxyCreator`会自动为匹配的方法生成CGLIB代理,从而支持接口方法的拦截。测试显示,无论注解在接口或实现类上,均可成功拦截并执行前后逻辑。文章强调,接口必须有实现类,否则Spring启动会报错。该方案借鉴了“keetone”大神的思想,并提供了完整可运行的代码示例,适合在需要灵活使用自定义注解的场景中应用。(198字)
2022-12-09
23
0
0
后端开发
2022-12-09
Java-Collectors(Stream流)常用的20个方法
本文介绍了Java 8 Stream API中常用的`Collectors`工具类方法,用于对流中的元素进行收集、聚合和转换。主要内容包括:通过`toList()`、`toSet()`、`toCollection()`将元素收集为不同集合类型,其中`toSet()`自动去重;`toUnmodifiableList()`和`toUnmodifiableSet()`生成不可变集合;`counting()`统计元素数量;`minBy()`和`maxBy()`分别求最小/最大值,支持自然排序或自定义比较器;`joining()`用于拼接字符串;`averagingInt()`、`averagingLong()`、`averagingDouble()`计算平均值(返回Double类型);`summingInt()`、`summingLong()`、`summingDouble()`计算总和;`summarizingInt()`提供统计摘要(含计数、总和、最小值、最大值、平均值);`toMap()`创建Map,支持处理重复键;`partitioningBy()`按条件将集合分为两部分;`groupingBy()`实现多级分组,支持指定分组集合类型。这些方法极大简化了集合操作,提升代码可读性和效率。
2022-12-09
30
0
0
后端开发
2022-04-08
SprignBoot项目访问数据库报错
本文总结了Spring Boot项目连接MySQL时遇到的两个常见错误及解决方法。第一个错误是因连接重试失败次数过多,触发MySQL的保护机制,导致主机被封锁,需通过`mysqladmin flush-hosts`或删除`user`表中`host='localhost'`的冗余记录解决。第二个错误源于MySQL 5.5.45+版本对SSL连接的强制要求,IDEA提示警告而VSCode直接报错,通过在`application.yml`或配置文件中添加`useSSL=false`即可兼容旧版本应用,避免连接失败。两个问题均涉及数据库连接配置的调整,需结合实际环境和版本兼容性处理。
2022-04-08
17
0
0
错误合集
后端开发
2021-03-26
定制 Spring Security 错误提示信息
在使用Spring Security时,登录失败默认提示“坏的凭证”,对用户不友好,需自定义错误信息。Spring Security通过`SpringSecurityMessageSource`类加载`messages_zh_CN.properties`等本地化配置文件,但直接注入`messageSource` bean在Spring Boot环境中无效。官方虽建议通过配置`messageSource` bean实现替换,但在实际应用中未能覆盖原生提示。解决方案为:在项目`resources`目录下创建`org/springframework/security`路径,并复制`messages_zh_CN.properties`文件,修改其中的错误提示内容(如将“坏的凭证”改为“用户名或密码错误”)。此举可直接覆盖Spring Security默认配置文件,无需额外配置bean,实现高效、简洁的错误信息定制。此方法适用于Spring Boot集成环境,确保用户获得更友好的登录反馈。
2021-03-26
20
0
0
后端开发
学习笔记
2021-03-26
Spring Boot 异常 X-Frame-Options to DENY
在Spring Boot项目中,默认安全配置会设置响应头`X-Frame-Options: DENY`,用于防止点击劫持攻击,禁止页面被嵌入到iframe中。这会导致使用iframe上传图片或嵌套页面时,浏览器报错“Refused to display in a frame because it set 'X-Frame-Options' to 'DENY'”。解决方案是扩展`WebSecurityConfigurerAdapter`,在配置中添加`http.headers().frameOptions().disable()`,即可禁用该安全策略,使响应头不再包含该选项。此操作虽解决iframe嵌套问题,但需注意可能降低安全性,建议在确保安全上下文的前提下使用,如仅在特定接口或前端页面中禁用。
2021-03-26
15
0
0
后端开发
错误合集
1
2
鄂ICP备20003961号-3