属性文件中的属性返回null

时间:2018-05-06 18:41:04

标签: java spring spring-mvc properties

我有一个DBconfig属性文件,其属性如下;

DB_url = jdbc:mysql://localhost:8080/studentdb
DB_username = root
DB_password = abc123

我想打印数据库服务类(DBconnect.class)中的值,

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

    private Connection con= null;

    @Value("${DB_url}")
    private String url;

    @Value("${DB_username}")
    private String username;

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

    public DBconnection() {

        System.out.println(url);      // Output = null
        System.out.println(username); // Output = null
        System.out.println(password); // Output = null

    }

}

完全相同的代码工作,当我尝试从控制器打印值时打印值;

@Controller
@PropertySource("classpath:DBconfig.properties")
public class HomeController {

    @Value("${DB_url}")
    private String url;

    @Value("${DB_username}")
    private String username;

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

    @RequestMapping(value="/", method=RequestMethod.GET)
    public String Message() {


        System.out.println(url); //jdbc:mysql://localhost:8080/studentdb      
        System.out.println(username); //root
        System.out.println(password); //abc123

        DBconnection conn = new DBconnection();
        return "home";
    }

}

为什么它在控制器中工作而不是我的服务包?我如何在我的服务包中使用它?

我在src / main / java中只有2个包;

控制器包(包括HomeController.class) 服务包(包括DBconnect.class)

src / main / resources包含DBconfig.properties文件

1 个答案:

答案 0 :(得分:1)

使用@Value时,通过BeanPostProcessor

注入值时的Spring容器

因此,在构造函数中,您的值都为null。

在您的控制器中,您可以访问注入的值,因为bean现在已完全实例化

如果您想在服务中访问注入的值,请将@Configuration添加到您的班级,并为您的方法添加@PostConstruct注释:

@Configuration
@PropertySource("classpath:DBconfig.properties")
public class DBconnection {

@PostConstruct
public void init() {
        System.out.println(url); //jdbc:mysql://localhost:8080/studentdb      
        System.out.println(username); //root
        System.out.println(password); //abc123
}
}