<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>后端疑难杂症解答 on 洛克里亚的五度 博客</title>
    <link>https://lv-blog.pages.dev/tags/%E5%90%8E%E7%AB%AF%E7%96%91%E9%9A%BE%E6%9D%82%E7%97%87%E8%A7%A3%E7%AD%94/</link>
    <description>Recent content in 后端疑难杂症解答 on 洛克里亚的五度 博客</description>
    <generator>Hugo</generator>
    <language>zh</language>
    <lastBuildDate>Sat, 25 Oct 2025 12:55:49 +0800</lastBuildDate>
    <atom:link href="https://lv-blog.pages.dev/tags/%E5%90%8E%E7%AB%AF%E7%96%91%E9%9A%BE%E6%9D%82%E7%97%87%E8%A7%A3%E7%AD%94/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>PostgreSQL和java的LocalDateTime不兼容的问题</title>
      <link>https://lv-blog.pages.dev/posts/programming/backend/bugs-solutions/postgresql-java-localdatetime-incompatibility/</link>
      <pubDate>Sat, 25 Oct 2025 12:55:49 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/posts/programming/backend/bugs-solutions/postgresql-java-localdatetime-incompatibility/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Java 的 &lt;code&gt;LocalDateTime&lt;/code&gt; 和 PostgreSQL 的时间类型，&amp;ldquo;说的不是同一种时间&amp;rdquo;。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;先搞清楚-postgresql-的两种时间类型&#34;&gt;先搞清楚 PostgreSQL 的两种时间类型&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;TIMESTAMP           → 不带时区，就是个裸时间 &amp;#34;2026-06-25 10:00:00&amp;#34;
TIMESTAMPTZ         → 带时区，内部存 UTC，查询时按会话时区转换
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;java-这边&#34;&gt;Java 这边&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;LocalDateTime       → 没有时区概念，就是个裸时间
ZonedDateTime       → 带时区
OffsetDateTime      → 带偏移量（如 +08:00）
Instant             → UTC 时间戳
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;为什么会报错&#34;&gt;为什么会报错&lt;/h2&gt;
&lt;p&gt;PostgreSQL JDBC 驱动（特别是新版本 42.x+）对类型匹配&lt;strong&gt;非常严格&lt;/strong&gt;：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flowchart TD
    A[Java LocalDateTime] --&amp;gt; B[JDBC驱动]
    B --&amp;gt; C{PostgreSQL列类型}
    C --&amp;gt;|TIMESTAMP| D[✅ 可以匹配]
    C --&amp;gt;|TIMESTAMPTZ| E[❌ 类型不匹配报错]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;你的列如果是 &lt;code&gt;TIMESTAMPTZ&lt;/code&gt;（带时区），但 Java 传的是 &lt;code&gt;LocalDateTime&lt;/code&gt;（无时区），驱动不知道该用哪个时区换算，就直接拒绝了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;常见的三种报错&#34;&gt;常见的三种报错&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Cannot convert LocalDateTime to TIMESTAMPTZ
Bad value for type timestamp/date
column is of type timestamp with time zone but expression is of type timestamp
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;解决方案&#34;&gt;解决方案&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;方案一：改 Java 类型（推荐）&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Swagger2和Swagger3注解对比表</title>
      <link>https://lv-blog.pages.dev/posts/programming/backend/bugs-solutions/swagger-2-3-annotation-comparison/</link>
      <pubDate>Thu, 25 Sep 2025 09:06:35 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/posts/programming/backend/bugs-solutions/swagger-2-3-annotation-comparison/</guid>
      <description>&lt;p&gt;在 Spring Boot 生态中，Swagger 2.0（通常使用 &lt;code&gt;Foxfire&lt;/code&gt; 依赖）和 Swagger 3.0（通常使用 &lt;code&gt;Springdoc-openapi&lt;/code&gt; 依赖，基于 OpenAPI 3 规范）的注解发生了很大变化。&lt;/p&gt;
&lt;p&gt;以下是 Swagger 2.0 与 Swagger 3.0（OpenAPI 3）的常用注释完整对应表：&lt;/p&gt;
&lt;h3 id=&#34;1-核心注解对应表&#34;&gt;1. 核心注解对应表&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;功能描述&lt;/th&gt;
					&lt;th&gt;Swagger 2.0 注解 (io.swagger.annotations)&lt;/th&gt;
					&lt;th&gt;Swagger 3.0 注解 (io.swagger.v3.oas.annotations)&lt;/th&gt;
					&lt;th&gt;备注说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;标记控制器类&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@Api(tags = &amp;quot;用户接口&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@Tag(name = &amp;quot;用户接口&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;3.0 中移除了 &lt;code&gt;description&lt;/code&gt; 属性，统一使用 &lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;标记接口方法&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@ApiOperation(value = &amp;quot;获取用户&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@Operation(summary = &amp;quot;获取用户&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;3.0 中 &lt;code&gt;value&lt;/code&gt; 变更为 &lt;code&gt;summary&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;入参实体类&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@ApiModel(value = &amp;quot;用户对象&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@Schema(description = &amp;quot;用户对象&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;3.0 极大简化，统一使用 &lt;code&gt;@Schema&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;实体类属性&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@ApiModelProperty(value = &amp;quot;姓名&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@Schema(description = &amp;quot;姓名&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;同上，合并为了 &lt;code&gt;@Schema&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;忽略某个属性&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@ApiModelProperty(hidden = true)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@Schema(hidden = true)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;忽略整个类/方法&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@ApiIgnore&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;@Hidden&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;用于不想暴露在文档中的接口或参数&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id=&#34;2-请求参数注解对应表&#34;&gt;2. 请求参数注解对应表&lt;/h3&gt;
&lt;p&gt;对于方法入参（如 URL 路径参数、Query 参数等），3.0 引入了更具结构化的配置：&lt;/p&gt;</description>
    </item>
    <item>
      <title>SCA 2023.X — Nacos Bootstrap 配置失效问题排查与解决方案</title>
      <link>https://lv-blog.pages.dev/posts/programming/backend/bugs-solutions/sca-nacos-bootstrap-bug/</link>
      <pubDate>Thu, 24 Jul 2025 22:40:26 +0800</pubDate>
      <guid>https://lv-blog.pages.dev/posts/programming/backend/bugs-solutions/sca-nacos-bootstrap-bug/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Issue 来源&lt;/strong&gt;：&lt;a href=&#34;https://github.com/alibaba/spring-cloud-alibaba/issues/3931&#34;&gt;spring-cloud-alibaba#3931&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;影响版本&lt;/strong&gt;：&lt;code&gt;spring-cloud-alibaba 2023.0.1.3+&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一问题描述&#34;&gt;一、问题描述&lt;/h2&gt;
&lt;p&gt;在 Spring Cloud Alibaba 2023.X 版本中，将 Nacos 配置（包括 &lt;code&gt;extension-configs&lt;/code&gt;、&lt;code&gt;shared-configs&lt;/code&gt; 等）放在 &lt;code&gt;bootstrap.yml&lt;/code&gt; / &lt;code&gt;bootstrap.properties&lt;/code&gt; 中，&lt;strong&gt;配置中心的内容无法正常加载&lt;/strong&gt;，但日志显示 &lt;code&gt;bootstrap&lt;/code&gt; 文件本身已被读取。&lt;/p&gt;
&lt;p&gt;将相同配置移到 &lt;code&gt;application.yml&lt;/code&gt; 后，一切恢复正常。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二根本原因&#34;&gt;二、根本原因&lt;/h2&gt;
&lt;pre class=&#34;mermaid&#34;&gt;flowchart TD
    A[bootstrap.yml 被读取] --&gt; B{SCA 版本判断}
    B -- 2023.0.1.2 及以前 --&gt; C[✅ 正常加载 Nacos 配置中心]
    B -- 2023.0.1.3 及以后 --&gt; D[❌ extension-configs / shared-configs 失效]
    D --&gt; E[问题根源：SCA 2023.0.1.3 修改了配置加载优先级机制]
    E --&gt; F[bootstrap 阶段注册的 Nacos PropertySource 被后续流程覆盖或丢弃]
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;简单来说：&lt;/strong&gt;&lt;br&gt;
SCA &lt;code&gt;2023.0.1.3&lt;/code&gt; 做了一次&lt;strong&gt;不向后兼容的内部变更&lt;/strong&gt;，导致 &lt;code&gt;bootstrap.yml&lt;/code&gt; 中的 Nacos 扩展配置在加载链路中被&amp;quot;丢掉&amp;quot;，而 &lt;code&gt;application.yml&lt;/code&gt; 中的配置走的是新路径，不受影响。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
