<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>NotionNext BLOG</title>
        <link>https://tangly1024.com/</link>
        <description>这是一个由NotionNext生成的站点</description>
        <lastBuildDate>Sat, 06 Jan 2024 09:39:47 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-CN</language>
        <copyright>All rights reserved 2024, NotionNext</copyright>
        <item>
            <title><![CDATA[SpringBoot单元测试时读取properties报错]]></title>
            <link>https://tangly1024.com/article/springboot-unit-error</link>
            <guid>https://tangly1024.com/article/springboot-unit-error</guid>
            <pubDate>Wed, 27 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[SpringBoot单元测试时读取properties报错]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-b63a4661435c4fad93828e3976875e0e"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-664cda1e8576422587822ac98d342291" data-id="664cda1e8576422587822ac98d342291"><span><div id="664cda1e8576422587822ac98d342291" class="notion-header-anchor"></div><a class="notion-hash-link" href="#664cda1e8576422587822ac98d342291" title="SpringBoot单元测试时读取properties报错"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">SpringBoot单元测试时读取properties报错</span></span></h3><div class="notion-blank notion-block-8bc59db688714b0db512d95e0af2da6b"> </div><div class="notion-callout notion-red_background_co notion-block-352bc2281ecf44eab9287d1b32373e31"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="💡">💡</span></div><div class="notion-callout-text">SpringBoot单元测试时读取properties报错</div></div><blockquote class="notion-quote notion-block-3e1dbb13f79c4fa4a7dc3239f11eedf6"><div>org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#x27;elasticSearchConfiguration&#x27;: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder &#x27;spring.elasticsearch.host&#x27; in value &quot;${spring.elasticsearch.host}&quot;</div></blockquote><blockquote class="notion-quote notion-block-2cff077fa9494c99be70163835fcd349"><div>在使用 Spring Boot 进行单元测试时，如果遇到「could not resolve placeholder &#x27;spring.profiles.active&#x27;」的错误提示，通常是因为你在测试用例中使用了 @ActiveProfiles 注解来激活某些特定的配置文件，但是你的项目中并没有这些指定的配置文件。

为了解决这个问题，你需要检查你的测试用例中是否使用了 @ActiveProfiles 注解，并确保项目中存在指定的配置文件。如果你确实使用了 @ActiveProfiles 注解，但是没有找到指定的配置文件，你可以尝试将配置文件放在 src/test/resources 目录下，以便在测试时能够找到这些文件。

同时，你也可以在测试用例中使用 @TestPropertySource 注解来指定一组属性文件，这样就可以在测试时载入指定的属性文件。

例如，你可以这样使用 @TestPropertySource 注解：</div></blockquote></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Slf4j日志写入到ElasticSearch]]></title>
            <link>https://tangly1024.com/article/slf4j2elastic</link>
            <guid>https://tangly1024.com/article/slf4j2elastic</guid>
            <pubDate>Thu, 21 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Slf4j日志写入到ElasticSearch]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-aa0c58792fed4004b4a3dd0c1d16060c"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-1b8963efc55e429c95bc50690ba69aa7" data-id="1b8963efc55e429c95bc50690ba69aa7"><span><div id="1b8963efc55e429c95bc50690ba69aa7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1b8963efc55e429c95bc50690ba69aa7" title="1. pom.xml"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">1. pom.xml</span></span></h3><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-429970ac94894b5baa0e7d214cbbc083" data-id="429970ac94894b5baa0e7d214cbbc083"><span><div id="429970ac94894b5baa0e7d214cbbc083" class="notion-header-anchor"></div><a class="notion-hash-link" href="#429970ac94894b5baa0e7d214cbbc083" title="2. logback"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2. logback</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-f40a2918f23141c489c14a0ccbf4e37d" data-id="f40a2918f23141c489c14a0ccbf4e37d"><span><div id="f40a2918f23141c489c14a0ccbf4e37d" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f40a2918f23141c489c14a0ccbf4e37d" title="2.1 logback.xml"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.1 logback.xml</span></span></h4><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-6211fe72bb8f4bbe9710b4977f22b57a" data-id="6211fe72bb8f4bbe9710b4977f22b57a"><span><div id="6211fe72bb8f4bbe9710b4977f22b57a" class="notion-header-anchor"></div><a class="notion-hash-link" href="#6211fe72bb8f4bbe9710b4977f22b57a" title="2.2 ElasticSearchAppender.java"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">2.2 ElasticSearchAppender.java</span></span></h4><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-557723a7bcc040f2a8c30182842a2210" data-id="557723a7bcc040f2a8c30182842a2210"><span><div id="557723a7bcc040f2a8c30182842a2210" class="notion-header-anchor"></div><a class="notion-hash-link" href="#557723a7bcc040f2a8c30182842a2210" title="3. log4j2"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3. log4j2</span></span></h4><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-a0b65d6653a44603bdbe39259539e9c7" data-id="a0b65d6653a44603bdbe39259539e9c7"><span><div id="a0b65d6653a44603bdbe39259539e9c7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#a0b65d6653a44603bdbe39259539e9c7" title="3.1 log4j2-spring.xml"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">3.1 log4j2-spring.xml</span></span></h4><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-05983f65bf934040b42b34a137b6b017" data-id="05983f65bf934040b42b34a137b6b017"><span><div id="05983f65bf934040b42b34a137b6b017" class="notion-header-anchor"></div><a class="notion-hash-link" href="#05983f65bf934040b42b34a137b6b017" title="参考资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考资料</span></span></h2><ul class="notion-list notion-list-disc notion-block-8941dd544cd04813bd8170ddb72dab17"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://logging.apache.org/log4j/2.x/manual/appenders.html#SocketAppender">https://logging.apache.org/log4j/2.x/manual/appenders.html#SocketAppender</a></li></ul><ul class="notion-list notion-list-disc notion-block-99edaf212ece460ebdfd6e61479f8d8c"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/internetitem/logback-elasticsearch-appender">https://github.com/internetitem/logback-elasticsearch-appender</a></li></ul><ul class="notion-list notion-list-disc notion-block-9eecd25119d24164a2bc073150392697"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/rfoltyns/log4j2-elasticsearch">https://github.com/rfoltyns/log4j2-elasticsearch</a></li></ul><ul class="notion-list notion-list-disc notion-block-008dfbaf651c4b1c830820589c02b659"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://dunwu.github.io/db-tutorial/pages/4b1907/">https://dunwu.github.io/db-tutorial/pages/4b1907</a></li></ul><ul class="notion-list notion-list-disc notion-block-51f36d0ea3974e029b56962eea3e75cd"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://blog.csdn.net/qq_31745863/article/details/124705261">https://blog.csdn.net/qq_31745863/article/details/124705261</a></li></ul><ul class="notion-list notion-list-disc notion-block-815bb9a0d3d642bba7bbe1394c148c61"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://cloud.tencent.com/developer/article/1786808">https://cloud.tencent.com/developer/article/1786808</a></li></ul><ul class="notion-list notion-list-disc notion-block-9991313da3dc4005b82c7c1d6fb3da02"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://juejin.cn/post/7261442058677796901">https://juejin.cn/post/7261442058677796901</a></li></ul><ul class="notion-list notion-list-disc notion-block-2def805b8f684ae8a7236d2ef7a47058"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://blog.51cto.com/u_16213429/8628712">https://blog.51cto.com/u_16213429/8628712</a></li></ul><ul class="notion-list notion-list-disc notion-block-abd02007ac5744e99a3b1abb59b294e5"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://blog.csdn.net/qq_16504067/article/details/122713360">https://blog.csdn.net/qq_16504067/article/details/122713360</a></li></ul><div class="notion-blank notion-block-6694e1d8e8694a4fab228ec34937cf04"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[解决ThreadLocal在开启子线程时，父线程向子线程值传递问题]]></title>
            <link>https://tangly1024.com/article/java-sub-thread-var</link>
            <guid>https://tangly1024.com/article/java-sub-thread-var</guid>
            <pubDate>Sat, 06 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[解决ThreadLocal在开启子线程时，父线程向子线程值传递问题]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-00c9655b15a447f8913d3b51d86e19d3"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h4 class="notion-h notion-h3 notion-h-indent-0 notion-block-19c930ef4d6347e0b0b93209cca43102" data-id="19c930ef4d6347e0b0b93209cca43102"><span><div id="19c930ef4d6347e0b0b93209cca43102" class="notion-header-anchor"></div><a class="notion-hash-link" href="#19c930ef4d6347e0b0b93209cca43102" title="普通ThreadLocal存在的问题"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b><b>普通ThreadLocal存在的问题</b></b></span></span></h4><div class="notion-callout notion-orange_background_co notion-block-3baa978c1e07435d93954129022198a2"><div class="notion-page-icon-inline notion-page-icon-span"><span class="notion-page-icon" role="img" aria-label="💡">💡</span></div><div class="notion-callout-text">普通的ThreadLocal类开启一个新的Thread，在子线程中打印父线程中set的ThreadLocal值。子线程打印的结果为null，说明<span class="notion-inline-underscore"><em><b>父线程的ThreadLocal值在子线程中并未得到传递</b></em></span>，而是中断了。</div></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-7d0f84ad125e4f33a07f881e78cd49f3" data-id="7d0f84ad125e4f33a07f881e78cd49f3"><span><div id="7d0f84ad125e4f33a07f881e78cd49f3" class="notion-header-anchor"></div><a class="notion-hash-link" href="#7d0f84ad125e4f33a07f881e78cd49f3" title="简单使用"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>简单使用</b></span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-1cb8acaeb2eb4c82bb984b79d7a0d27b" data-id="1cb8acaeb2eb4c82bb984b79d7a0d27b"><span><div id="1cb8acaeb2eb4c82bb984b79d7a0d27b" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1cb8acaeb2eb4c82bb984b79d7a0d27b" title="Spring的@Async注解也可以支持到"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">Spring的@Async注解也可以支持到</span></span></h4><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-edc9f479207f49f9a031d87cf2a69715" data-id="edc9f479207f49f9a031d87cf2a69715"><span><div id="edc9f479207f49f9a031d87cf2a69715" class="notion-header-anchor"></div><a class="notion-hash-link" href="#edc9f479207f49f9a031d87cf2a69715" title="参考资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考资料</span></span></h3><ul class="notion-list notion-list-disc notion-block-fc5de118abfb4a6c92e057b18a6bfcfb"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://github.com/alibaba/transmittable-thread-local#-%E9%9C%80%E6%B1%82%E5%9C%BA%E6%99%AF">https://github.com/alibaba/transmittable-thread-local#-需求场景</a></li></ul></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SpringBoot使用AOP对JSONRPC方法拦截时导致形式参数变为argX的解决办法]]></title>
            <link>https://tangly1024.com/article/springboot-aop-argx</link>
            <guid>https://tangly1024.com/article/springboot-aop-argx</guid>
            <pubDate>Fri, 29 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[SpringBoot使用AOP对JSONRPC方法拦截时导致形式参数变为argX的解决办法]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-7511a6c27ffc4bfab398c259c6008ed9"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-72b241d652a3420c9b7af0813bbb8056" data-id="72b241d652a3420c9b7af0813bbb8056"><span><div id="72b241d652a3420c9b7af0813bbb8056" class="notion-header-anchor"></div><a class="notion-hash-link" href="#72b241d652a3420c9b7af0813bbb8056" title="aop代码"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">aop代码</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-0b006c4578264db9839eac7a9668b03f" data-id="0b006c4578264db9839eac7a9668b03f"><span><div id="0b006c4578264db9839eac7a9668b03f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0b006c4578264db9839eac7a9668b03f" title="问题描述"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">问题描述</span></span></h4><blockquote class="notion-quote notion-block-56793efd820f4206bc03d3ae11fcf43e"><div>spring使用aop的某个接口进行拦截时导致形式参数通过反射获取时发生变化,导致JSONRPC在进行参数绑定时找不到对应的对象。</div></blockquote><div class="notion-text notion-block-61783f15211f4742803c32a47d5183be">Parameter[] paramsReflect = m.getParameters();</div><div class="notion-text notion-block-48fb95ee49e5425e83ba27d51e4e4d49">(String ctx, String name) -&gt; (String arg0, String arg1)</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-1da07a5321f14118821979db5bf1f097" data-id="1da07a5321f14118821979db5bf1f097"><span><div id="1da07a5321f14118821979db5bf1f097" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1da07a5321f14118821979db5bf1f097" title="没开启aop时"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">没开启aop时</span></span></h4><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-a1693e240da04668bc933c3399c4db26"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fa5993753-d2b0-4c2b-ba54-7fec28a4dcad%2Fe8f7bb04-ecba-4a2d-a046-67259643eb74%2FUntitled.png?table=block&amp;id=a1693e24-0da0-4668-bc93-3c3399c4db26&amp;t=a1693e24-0da0-4668-bc93-3c3399c4db26" alt="notion image" loading="lazy" decoding="async"/></div></figure><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-1ceb6487624a463987872b4979c16912" data-id="1ceb6487624a463987872b4979c16912"><span><div id="1ceb6487624a463987872b4979c16912" class="notion-header-anchor"></div><a class="notion-hash-link" href="#1ceb6487624a463987872b4979c16912" title="开启aop时"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">开启aop时</span></span></h4><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-b9858eb2d4604fce982e641dbb08d7f3"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fa5993753-d2b0-4c2b-ba54-7fec28a4dcad%2Fa1428651-c6a7-4660-b464-7d64de966b03%2FUntitled.png?table=block&amp;id=b9858eb2-d460-4fce-982e-641dbb08d7f3&amp;t=b9858eb2-d460-4fce-982e-641dbb08d7f3" alt="notion image" loading="lazy" decoding="async"/></div></figure><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-5559eedd34fc476eb770c2379267d0ae" data-id="5559eedd34fc476eb770c2379267d0ae"><span><div id="5559eedd34fc476eb770c2379267d0ae" class="notion-header-anchor"></div><a class="notion-hash-link" href="#5559eedd34fc476eb770c2379267d0ae" title="解决的方法"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">解决的方法</span></span></h3><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-6ebe73fef42448d0b9bdfc80fe1cc91f"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fa5993753-d2b0-4c2b-ba54-7fec28a4dcad%2Ffb701914-78d8-412b-9349-59be2fb7354c%2FUntitled.png?table=block&amp;id=6ebe73fe-f424-48d0-b9bd-fc80fe1cc91f&amp;t=6ebe73fe-f424-48d0-b9bd-fc80fe1cc91f" alt="notion image" loading="lazy" decoding="async"/></div></figure><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-267aba01a0664b5eabe4e9e1f0fa907f" data-id="267aba01a0664b5eabe4e9e1f0fa907f"><span><div id="267aba01a0664b5eabe4e9e1f0fa907f" class="notion-header-anchor"></div><a class="notion-hash-link" href="#267aba01a0664b5eabe4e9e1f0fa907f" title="参考资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考资料</span></span></h3><ul class="notion-list notion-list-disc notion-block-3c162a388daf48cda5e362efe324b022"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://stackoverflow.com/questions/28913390/how-to-keep-method-parameters-names-with-spring-aspect-in-java-8">https://stackoverflow.com/questions/28913390/how-to-keep-method-parameters-names-with-spring-aspect-in-java-8</a></li></ul><ul class="notion-list notion-list-disc notion-block-fa6a09f1f5544140b7c6027afbbe693e"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.guitu18.com/post/2019/08/22/50.html">https://www.guitu18.com/post/2019/08/22/50.html</a></li></ul><div class="notion-blank notion-block-c04948a2134e4b2dadc14568b4dd12da"> </div></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SSH隧道代理]]></title>
            <link>https://tangly1024.com/article/ssh-tunnel</link>
            <guid>https://tangly1024.com/article/ssh-tunnel</guid>
            <pubDate>Tue, 26 Dec 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[SSH隧道代理]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-8f02352b548746e9a18dcc17f263082d"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-6ccf8e57a3af4e46820f0430ad3c0aa7" data-id="6ccf8e57a3af4e46820f0430ad3c0aa7"><span><div id="6ccf8e57a3af4e46820f0430ad3c0aa7" class="notion-header-anchor"></div><a class="notion-hash-link" href="#6ccf8e57a3af4e46820f0430ad3c0aa7" title="理解清楚SSH端口转发"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">理解清楚SSH端口转发</span></span></h3><ul class="notion-list notion-list-disc notion-block-0991dbc4aa304bc2ba24f78ee623045a"><li>SSH简单的理解就是2台机器之间安全的数据通道，它包括ssh的client和ssh的server2个角色，这样的一条通道也就是ssh隧道(ssh tunneling)</li></ul><ul class="notion-list notion-list-disc notion-block-e3280b9065704c88ba539cd676bcc43c"><li>SSH 端口转发自然需要 SSH 连接，而 SSH 连接是有方向的，从 SSH Client 到 SSH Server</li></ul><ul class="notion-list notion-list-disc notion-block-aa8012ebe5ee4d2fa61c567670e76758"><li>我们的应用的请求也是有方向的，一般是客户端向服务器端发出请求</li></ul><ul class="notion-list notion-list-disc notion-block-7a60bd1850974539bc9df60b39edbe4f"><li>一旦这2个方向相同，我们称为ssh的本地转发(-L)，不同则为远端转发(-R)</li></ul><ul class="notion-list notion-list-disc notion-block-0b91e6a236744187954182eeccff8b49"><li>命令一般是跑在ssh client的机器上的</li></ul><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-0d83d97ca8ed471ea6f48d9ffa5cd7ac" data-id="0d83d97ca8ed471ea6f48d9ffa5cd7ac"><span><div id="0d83d97ca8ed471ea6f48d9ffa5cd7ac" class="notion-header-anchor"></div><a class="notion-hash-link" href="#0d83d97ca8ed471ea6f48d9ffa5cd7ac" title="本地转发"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>本地转发</b></span></span></h4><blockquote class="notion-quote notion-block-fd88900c74d34ccb84293af38e703009"><div>ssh本地转发命令</div></blockquote><div class="notion-text notion-block-6153251b471448ce9c8e2b12f0cfcc59">从本地的端口发出请求，通过这台机器作为跳板转发请求到的端口。 是相对而言的，比如是127.0.0.1的话，就是本身。 所以一般如果是127.0.0.1的话，跳板机或者代理服务器就是目标服务器</div><ol start="1" class="notion-list notion-list-numbered notion-block-cb92bbb167f0405e8d2dabcc050fb439"><li>A是一台在我家的机器macbook air，它可以访问taobao，也就是服务器C</li></ol><ol start="2" class="notion-list notion-list-numbered notion-block-7773e797a10742cea33a17bbbbf94d32"><li>B是一台在公司的机器imac，由于在公司的内网，所以在家的A访问不到B</li></ol><ol start="3" class="notion-list notion-list-numbered notion-block-280f27e0885d490a86b60c548afa50a6"><li>C是taobao的服务器，公司不让上taobao，所以服务器B访问不了C</li></ol><div class="notion-text notion-block-77a25954fef14c52861eb117720bff55">现在要想在让B服务器能访问C的80端口，由于防火墙这条路本身是走不通的，但是由于B能访问A，A能访问C，所以能把A作为代理服务器实现这一要求。</div><div class="notion-text notion-block-0d5d87f112744c0493d338a1c0d19ce1">在服务器B和服务器A之间建立ssh隧道，在SSH端口转发中，由于服务器B能连接到服务器A，并且请求是从服务器B发出，所以B既是ssh的client，也是请求的客户端 所以此时应该在B上去运行ssh的本地转发命令: <code class="notion-inline-code">ssh -L 8080:HOST_C:80 HOST_A</code></div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-876a714f340740a2b73ee3c36b57cbda" data-id="876a714f340740a2b73ee3c36b57cbda"><span><div id="876a714f340740a2b73ee3c36b57cbda" class="notion-header-anchor"></div><a class="notion-hash-link" href="#876a714f340740a2b73ee3c36b57cbda" title="远端转发"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>远端转发</b></span></span></h4><blockquote class="notion-quote notion-block-c68c5e23c7fd4692950458c172d3fa9a"><div>ssh远端转发的命令</div></blockquote><div class="notion-text notion-block-84ba688e94d3482abc9a08ccbdcee453">由于本身B是可以访问A的，但是A访问不到B，现在要想服务器A访问到B，也就是在家能连上公司的机器。</div><div class="notion-text notion-block-fd479eb839114399bb663d5cac6dfb60">服务器B能连上A，所以B应该是ssh的client，此时请求是由A发起的，所以A是请求客户端，方向不同，所以是远端转发。 因此在B上运行命令: <code class="notion-inline-code">ssh -R 2222:127.0.0.1:22 HOST_A</code> ,这里127.0.0.1是因为通过A服务器转发的目的服务器就是A本身。 这样在A上的2222端口就映射到了B的22端口。</div><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-80a1907b76a34dc79c4b5b14d4e9f1de" data-id="80a1907b76a34dc79c4b5b14d4e9f1de"><span><div id="80a1907b76a34dc79c4b5b14d4e9f1de" class="notion-header-anchor"></div><a class="notion-hash-link" href="#80a1907b76a34dc79c4b5b14d4e9f1de" title="动态转发"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title"><b>动态转发</b></span></span></h4><div class="notion-text notion-block-3d96d3a5ac344698b332a529a8e3f1b4">不管是本地转发还是远端转发，都需要一个具体的应用服务器的地址和端口号，要想访问其他机器的内容就得绑定很多条这样的转发命令， 通过动态转发就能省去这一个应用服务器的信息。</div><hr class="notion-hr notion-block-1790b5dc3a574fabb5a6ba2cfa8b6760"/><div class="notion-text notion-block-0177416e6c9542468e12c1e87bece047">当我们在一个不安全的 WiFi 环境下上网，用 SSH 动态转发来保护我们的网页浏览等信息无疑是十分必要的。 比如在本机运行： <code class="notion-inline-code">sh -D 7001 &lt;SSH Server&gt;</code> 这样就相当于通过创建了一个SOCKS代理。</div><div class="notion-text notion-block-44dc32cd9a0d48fd8541de031bf89f2a">我们可以直接使用localhost:7001 来作为正常的 SOCKS 代理来使用，直接在浏览器上设置即可。 在 SSH Client 端无法访问的网站现在也都可以正常浏览。 而这里需要值得注意的是，此时 SSH 所包护的范围只包括从浏览器端（SSH Client 端）到 SSH Server 端的连接，并不包含从 SSH Server 端 到目标网站的连接。 如果后半截连接的安全不能得到充分的保证的话，这种方式仍不是合适的解决方案。</div><div class="notion-text notion-block-6108a84b09e244b6b63e5b42d0090889">这个时候还可以在本机将SOCKS代理转成HTTP代理。 比如在本地安装<a target="_blank" rel="noopener noreferrer" class="notion-link" href="http://www.pps.univ-paris-diderot.fr/~jch/software/polipo/">polipo</a>，修改polipo.conf文件，把SOCKS代理填上127.0.0.1:7001，然后 <code class="notion-inline-code">export http_proxy=&quot;127.0.0.1:8123&quot; &amp;&amp; export https_proxy=&quot;127.0.0.1:8123&quot;</code> 就在本地的8123端口起了一个http代理。</div><h2 class="notion-h notion-h1 notion-h-indent-0 notion-block-e4d9343db01a45c88df6d623f0d80d6c" data-id="e4d9343db01a45c88df6d623f0d80d6c"><span><div id="e4d9343db01a45c88df6d623f0d80d6c" class="notion-header-anchor"></div><a class="notion-hash-link" href="#e4d9343db01a45c88df6d623f0d80d6c" title="参考资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考资料</span></span></h2><ul class="notion-list notion-list-disc notion-block-72537ebd153a48f89b13066b2ce66fb6"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://www.panghuli.cn/notebook/gfw/sshuttle.html">https://www.panghuli.cn/notebook/gfw/sshuttle.html</a></li></ul><ul class="notion-list notion-list-disc notion-block-c92add6424a4496fb49881aed412925f"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://knowledge.zhaoweiguo.com/build/html/tool/vpns/tools/sshuttle">https://knowledge.zhaoweiguo.com/build/html/tool/vpns/tools/sshuttle</a></li></ul></main></div>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[SpringBoot动态@Document索引名]]></title>
            <link>https://tangly1024.com/article/springboot-dynamic-index</link>
            <guid>https://tangly1024.com/article/springboot-dynamic-index</guid>
            <pubDate>Thu, 04 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[SpringBoot动态@Document索引名]]></description>
            <content:encoded><![CDATA[<div id="notion-article" class="mx-auto overflow-hidden "><main class="notion light-mode notion-page notion-block-c799873bc0444bc4b6b3341679fd4ee4"><div class="notion-viewport"></div><div class="notion-collection-page-properties"></div><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-f49d3721ec8b40cbb49c812db0a4f8c4" data-id="f49d3721ec8b40cbb49c812db0a4f8c4"><span><div id="f49d3721ec8b40cbb49c812db0a4f8c4" class="notion-header-anchor"></div><a class="notion-hash-link" href="#f49d3721ec8b40cbb49c812db0a4f8c4" title="文档定义"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">文档定义</span></span></h3><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-fe9c1f0cbe6041b291c00750cd4c9f74" data-id="fe9c1f0cbe6041b291c00750cd4c9f74"><span><div id="fe9c1f0cbe6041b291c00750cd4c9f74" class="notion-header-anchor"></div><a class="notion-hash-link" href="#fe9c1f0cbe6041b291c00750cd4c9f74" title="动态文档名生成"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">动态文档名生成</span></span></h3><h4 class="notion-h notion-h3 notion-h-indent-1 notion-block-2a8314c1e6884540bf9cbe3a3899b445" data-id="2a8314c1e6884540bf9cbe3a3899b445"><span><div id="2a8314c1e6884540bf9cbe3a3899b445" class="notion-header-anchor"></div><a class="notion-hash-link" href="#2a8314c1e6884540bf9cbe3a3899b445" title="使用idea传入active profiles"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">使用idea传入active profiles</span></span></h4><figure class="notion-asset-wrapper notion-asset-wrapper-image notion-block-393be77164574b479b8277ce2b8f7656"><div style="position:relative;display:flex;justify-content:center;align-self:center;width:100%;max-width:100%;flex-direction:column;height:100%"><img style="object-fit:cover" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fa5993753-d2b0-4c2b-ba54-7fec28a4dcad%2F16dc97df-8ae8-486d-b237-8c22f6dfdc28%2FUntitled.png?table=block&amp;id=393be771-6457-4b47-9b82-77ce2b8f7656&amp;t=393be771-6457-4b47-9b82-77ce2b8f7656" alt="notion image" loading="lazy" decoding="async"/></div></figure><h3 class="notion-h notion-h2 notion-h-indent-0 notion-block-dea409d9ff634cbc90205d12dc321f76" data-id="dea409d9ff634cbc90205d12dc321f76"><span><div id="dea409d9ff634cbc90205d12dc321f76" class="notion-header-anchor"></div><a class="notion-hash-link" href="#dea409d9ff634cbc90205d12dc321f76" title="参考资料"><svg viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path></svg></a><span class="notion-h-title">参考资料</span></span></h3><ul class="notion-list notion-list-disc notion-block-4d26f48486c147ea83ae50d401244d9b"><li><a target="_blank" rel="noopener noreferrer" class="notion-link" href="https://juejin.cn/post/7140975221963505672">https://juejin.cn/post/7140975221963505672</a></li></ul><div class="notion-blank notion-block-fca495f315f94b9a8248d1b88b2c24b4"> </div></main></div>]]></content:encoded>
        </item>
    </channel>
</rss>