java 如何从Spring Condition访问文件属性?

guykilcj  于 2023-01-01  发布在  Java
关注(0)|答案(3)|浏览(150)

假设我们有一个简单的Spring Condition,它必须与属性文件中的一个文件属性匹配:

public class TestCondition implements Condition {

  @Override
  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    context.getEnvironment().getProperty("my.property");
    context.getBeanFactory().resolveEmbeddedValue("${my.property}");
    context.getEnvironment().resolvePlaceholders("${my.property}");

    // ... more code
  }
}

不幸的是,上面提到的方法调用都没有返回在属性文件中定义的真实的属性,相反,当我调用getProperty方法和“${my.property}”字符串时,我得到的是null(显然,属性还没有解析)。

2hh7jdfx

2hh7jdfx1#

PropertiesLoaderUtils怎么样?只要把它放进你的方法里,而不是你在那里的东西。

// path to your .properties file
Resource resource = new ClassPathResource("/my.properties");
Properties props = PropertiesLoaderUtils.loadProperties(resource);

....
String someValue = props.getProperty("someKey", "DEFAULT_VALUE");

如果你的东西不起作用,也许可以试试这个。

3htmauhk

3htmauhk2#

在spring中,你有很多方法来访问属性,主要的和最简单的如下
使用注入值

@PropertySource("classpath:foo.properties")
public class foo {

    @Value("${db.driver}")
    private String dbDriver;
}

也可以使用Environment

@PropertySource("classpath:config.properties")
public class foo {

  @Autowired
  private Environment env;
  ...
  dataSource.setUrl(env.getProperty("jdbc.url"));
}

更多信息可以在here上找到

iezvtpos

iezvtpos3#

我遇到了类似的问题。属性是通过XML加载的

<context:property-placeholder location="classpath:conf/coreConf.properties"/>

所以我必须添加空的java @Configuration来导入属性。

@Configuration
@PropertySource("classpath:conf/coreConf.properties")
public class Configuration {

}

从那以后我就能得到财产

@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    String property = context.getEnvironment().getProperty("main.settings.db.active");
    return property != null && Boolean.parseBoolean(property.trim());
}

相关问题