Атрибуты в файле свойств возвращают ноль - PullRequest
0 голосов
/ 06 мая 2018

У меня есть файл свойств 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";
    }

}

почему он работает в контроллере, а не в моем пакете услуг? как мне заставить это работать в моем пакете услуг?

У меня есть только 2 пакета в src / main / java;

пакет контроллера (включая HomeController.class) пакет услуг (DBconnect.class входит в комплект)

src / main / resources содержит файл DBconfig.properties

1 Ответ

0 голосов
/ 06 мая 2018

Когда вы используете @Value, контейнер Spring при вводе значения через BeanPostProcessor

Следовательно, в вашем конструкторе все ваши значения равны нулю.

В вашем контроллере вы можете получить доступ к введенному значению, потому что компонент теперь полностью создан

Если вы хотите получить доступ к введенному значению в службе, добавьте @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
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...