当前位置: 首页 > 知识库问答 >
问题:

在SpringBoot中是否有一个最佳实践来记录用@ConfigurationProperties注释的属性bean?

章威
2023-03-14

希望你一切都好。我就直奔主题:

我在一个Spring Boot应用程序中工作,使用Spring AOP处理日志记录问题。它工作正常,但是今天我发现我需要从@ConfigurationProperties-注释的bean中记录一些属性(至少是为了调试目的)。

我尝试使用切入点来捕获类构造函数及其setters(Spring使用它用反射填充字段)。它不起作用,我相信这是由于反射使用。

我使用以下代码解决了日志记录问题:

@Configuration
@Getter
@Setter
@ConfigurationProperties(prefix = "my.props")    
@Slf4j
public class MyProps {
    private String url;
    private String tableName;

    @PostConstruct
    void logSomeFields() {
        if (log.isInfoEnabled()) {
            log.info("The URL is '{}' and the table name is '{}'",
                url,
                tableName
            );
        }
    }
}

application.yml:

my:
  props:
    url: "http://localhost:8500"
    tablename: "test_table"

由于我假设将日志代码放在属性bean中是一种不好的做法,您能告诉我是否有一种方法可以使用SpringAOP以便将日志代码移出这个类吗?

提前谢谢你。

当做

共有1个答案

梁丘霖
2023-03-14

看起来您真正想要记录的是服务对象的配置,所以直接在对象的构造函数中记录。通常会在调试或跟踪级别记录这些信息,然后保留日志语句,以便在以后需要时打开它们。

请注意,没有必要使用log.is

 类似资料:
  • 我最近遇到了java注释。谷歌搜索是什么使Java中的可变函数变得不安全,这让我相当困惑(堆中毒?删除类型?),所以我想知道一些事情: > 在意义上,是什么使一个不同的Java函数不安全(最好以深入示例的形式解释)? 是否有一些标准必须遵守,以确保他的功能确实是安全的?如果没有,有什么最佳做法来确保它?

  • 问题内容: 我正在构建一个基于expressjs的应用程序,我想在其中记录所有事件。我可以找到温斯顿,这似乎很酷。无论如何,我正在寻找一种方法将其连接到我的expressjs应用程序。 我还想要在应用程序内部登录。我的要求不是那么简单,所以我想将所有内容记录在我的应用程序中(不仅是请求)。 我目前的情况: server.js (我想在此级别记录http请求) 路线/something.js con

  • 问题内容: 我用来处理我的Go依赖项。最好也将目录提交到版本控制中吗?还是在签出存储库后始终执行的最佳实践? 问题答案: 该工具的常见问题解答可以回答以下问题: 我应该提交供应商目录吗? 由你决定: 优点 * 这是获得真正可复制的构建的唯一方法,因为它可以防止上游重命名,删除和提交历史记录覆盖。*在执行大多数操作(例如,获取,克隆,获取最新信息,合并等)之后,无需额外的dep确保步骤即可将供应商/

  • 问题内容: 我们的代码使用了许多系统属性,例如’java.io.tmpdir’,’user.home’,’user.name’等。我们在任何地方都没有为这些常量定义任何常量(我认为Java也没有)或处理它们的任何其他聪明的事情,因此它们在整个代码中都是乱七八糟的。 每个人如何使用系统属性? 问题答案: 我将把它当作您遍历整个代码的任何其他String常量,并为其定义一个常量变量。当然,在这种情况下

  • 我在尝试执行此代码时遇到以下错误。 java.lang.IllegalArgumentException:在“com.app.aggregatorappaconfiguration”上找不到ConfigurationProperties注释。在org.springframework.util.assert.NotNull(assert.java:115)~[spring-core-4.3.2.re

  • 问题内容: 我正在调用一个Web服务,该服务返回JSON中的对象数组。我想获取这些对象并使用HTML填充div。假设每个对象都包含一个url和一个名称。 如果我想为每个对象生成以下HTML: 是否有最佳做法?我可以看到几种方法: 连接字符串 创建元素 使用模板插件 在服务器上生成html,然后通过JSON投放。 问题答案: 选项#1和#2将是您最直接的直接选项,但是,对于这两个选项,您都将通过构建