Java 属性文件中的属性返回null
我有一个DBconfig属性文件,其属性如下:Java 属性文件中的属性返回null,java,spring,spring-mvc,properties,Java,Spring,Spring Mvc,Properties,我有一个DBconfig属性文件,其属性如下: DB_url = jdbc:mysql://localhost:8080/studentdb DB_username = root DB_password = abc123 我想打印数据库服务类(DBconnect.class)中的值 当我试图从控制器打印值时,完全相同的代码工作,并且打印值 @Controller @PropertySource("classpath:DBconfig.properties") public class Home
DB_url = jdbc:mysql://localhost:8080/studentdb
DB_username = root
DB_password = abc123
我想打印数据库服务类(DBconnect.class)中的值
当我试图从控制器打印值时,完全相同的代码工作,并且打印值
@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)
当您使用
@Value
时,src/main/resources包含DBconfig.properties文件,当通过BeanPostProcessor
因此,在构造函数中,值都为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
}
}
如何调用DBconnection类?@Generic,方法是从控制器调用DBconnection构造函数。您可能需要向类中添加
@configuration
,并为构造函数方法添加@postconstruct
。是否清楚?@Generic在尝试此解决方案后,我仍然收到空值。您能为我提供一个工作代码解决方案吗?谢谢尝试此解决方案后,我仍然收到空值。请完全按照我写的那样写。在@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
}
}