Spring 启动时加载配置文件问题

Load Config File Issue in Spring Boot

我正在尝试从 Spring 引导应用程序中的 config.properties 文件获取字符串常量的值。但是,当我尝试从 java classes 访问这些值时,它们会变成 null。

请找到以下代码:

Config.properties 文件:

## user Details##
user.username=xyz
user.password=123456


##customer Details  ##
customer.username=abc
customer.password=123456

ConfigProp class:

@Component
@PropertySource("classpath:config.properties")
public class ConfigProp {
    @Value("${user.username}")
    private String userName;

    @Value("${user.password}")
    private String password;

    @Value("${customer.username}")
    private String custUserName;

    @Value("${customer.password}")
    private String custPassowrd;
}

测试Class:

public class Test {
    public static void main(String args[]) {
        ConfigProp configProp = new ConfigProp();
        System.out.println(configProp.getUserName());//coming as null
    }
}

Spring启动应用程序主class:

@SpringBootApplication
public class UserApplication {
    public static void main(String[] args) {
       SpringApplication.run(UserApplication.class, args);
    }
}

我不是很清楚这个问题,为什么值没有出现。谁能帮我解决这个问题,如果需要任何其他详细信息,请告诉我。

第一个问题在这里:

ConfigProp configProp = new ConfigProp();

您没有让 spring 保持这种依赖性,因此它没有将其识别为 bean

Testclass可以看起来像这样:

public class Test {
    @Autowired
    ConfigProp configProp;

    public static void main(String args[]) {
        System.out.println(configProp.getUserName());//coming as null
    }
}

这里的第二个问题是存在两个主要方法。您应该将 Test class 编写为 Junit 测试,它看起来像这样:

@RunWith(SpringRunner.class)
@SpringBootTest
public class Test {

    @Autowired
    ConfigProp configProp;

    @Test
    public void contextLoads() {
        assertEquals("abc", configProp.getCustUserName());
    }

}

另外 Test class 应该位于 src/test/java 位置。