@Value 没有被注入到其他包中

@Value not getting injected in other packages

我在 Spring 中定义了一个 属性 源,我正在尝试加载 class 路径

中存在的属性文件
@Configuration
@PropertySource(name = "props", value = "classpath:prod.properties")

public class PropertyPlaceholderConfigurerConfig {

    @Bean   
    public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {

        PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();

        Resource[] resources = new ClassPathResource[]

        { new ClassPathResource("prod.properties") };

        ppc.setLocations(resources);

        ppc.setIgnoreUnresolvablePlaceholders(true);

        return ppc;

    }

    @Value("${DATABASE_NAME}") private String DATABASE_NAME;

    @Bean   
    public String test() {
     System.out.println(DATABASE_NAME);

    }
}

My prod.properties file has 1 entry

DATABASE_NAME=proddb_123

现在在 test() bean 中打印为 proddb_123

我面临的两个问题是

  1. 我在另一个包中有另一个 class 我正在尝试 注入它

    @Value("${DATABASE_NAME}") 私有字符串 DATABASE_NAME;

    但是这个值总是"${DATABASE_NAME}"

  2. 我有不同的 gradle 项目,例如 webapplication-gradle 就是一个 @PropertySouce 配置定义的地方和另一个 像 storage-gradle 这样的项目。我可以将 DATABASE_NAME 注入任何 class 存在于存储-gradle 项目中。

在其他 class 中您想注入 @Value(${DATABASE_NAME}") 的地方,您还必须使用 @PropertySource 注释。另一种选择是删除@PropertySource 注释和在 applicaiton-context.xml 中定义了一个 class org.springframework.beans.factory.condig.PropertyPlaceholderConfigurer 的 bean,并为 属性 位置列表添加了 classpath:prod.properties