Spring @ConditionalOnProperty -如何使其工作

t98cgbkg  于 2023-11-17  发布在  Spring
关注(0)|答案(2)|浏览(98)

我有这个组件-类,如果属性accounting.generalServiceConfig.accountPageSize在application.properties中,则应该将日志条目写入日志文件。但是在底部使用这个类时,它不起作用。如果我在方法printAccountPageSize中添加注解**@Bean**并返回例如new Object(),则它不起作用。是否有可能使它像在底部一样使用这个类?

@Component
public class ConditionalPropertyChecker extends AbstractService {

    protected final Logger logger = LoggerFactory.getLogger(getClass());

    public ConditionalPropertyChecker() {
    }

    @ConditionalOnProperty(name = "accounting.generalServiceConfig.accountPageSize")
    public void printAccountPageSize() {
        logger
            .info("the accountPageSize is set in application.properties");
    }
}

字符串

e4yzc0pl

e4yzc0pl1#

@ConditionalOnProperty用于生成@Bean的@Configuration类。
你可以这样做:

@Component
public class ConditionalPropertyChecker extends AbstractService {

    protected final Logger logger = LoggerFactory.getLogger(getClass());

    public ConditionalPropertyChecker(@Value("${accounting.generalServiceConfig.accountPageSize}") Integer pageSize) {
      if (pageSize) {
        logger.info("the accountPageSize is set in application.properties");
      }
    }
}

字符串

jm81lzqq

jm81lzqq2#

在我的例子中,我有完全不同的属性文件名,似乎**@ConditionalOnProperty只能读取application.properties或application.yml**中的属性。我试图添加像@PropetySource这样的注解,仍然不起作用。

一旦我在我的项目中添加了例如application.properties,我的类(不仅是bean,还包括组件、服务等)就可以有条件地完美初始化。但是我不想仅仅因为这个注解就在项目中添加新的属性文件(即application.properties)。如果有人有更好的解决方案,请在下面评论:)否则我必须手动创建对象。

相关问题