Как читать из файлов свойств с помощью Spring - PullRequest
0 голосов
/ 05 марта 2020

Я бы хотел использовать Spring для чтения из файла свойств, извлекая URL, имя пользователя и пароль. Я прочитал много примеров в Интернете, и все они более или менее выглядят одинаково, но я просто не понимаю их.

Один из них сказал пример показывает два аналогичных метода с использованием аннотации @value и другой использует Environment env, но каждый пример, использующий последний, говорит, что он использует env.getProperty(), но этот метод, кажется, не существует для этого объекта? Используя @value, я не понимаю метод с именем sampleService. Я должен создать объектный класс?

     @Configuration
     @PropertySource("classpath:src/main/resources/config.properties")
     public class EnvironmentConfig {

    @Value("${config.properties}")
     public static String url;

    @Value("${config.properties}")
    public static String username;

    @Value("${config.properties}")
    public static String password;

    @Bean
    public static DataSource logInSetup() {

        DriverManagerDataSource login = new DriverManagerDataSource();
        login.setUrl(url);
        login.setUsername(username);
        login.setPassword(password);

        return login;
     }

     @Bean
     public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {

      return new PropertySourcesPlaceholderConfigurer();

Я не думаю, что вышеупомянутое даже близко удалено. Я уверен, что это более простые, чем я их представляю.

1 Ответ

2 голосов
/ 05 марта 2020

Если ваш файл свойств имеет вид:

url=...
username=...
password=...

Вы можете написать что-то вроде:

@Configuration
@PropertySource("classpath:src/main/resources/config.properties")
public class EnvironmentConfig {

  @Bean
  public DataSource logInSetup(@Value("${url}") String url, @Value("${username}") String username, @Value("${password}") String password) {

        DriverManagerDataSource login = new DriverManagerDataSource();
        login.setUrl(url);
        login.setUsername(username);
        login.setPassword(password);
        return login;
   }
}

Вы должны удалить static везде. Избегайте использования stati c с Spring.

И вам не нужно PropertySourcesPlaceholderConfigurer в качестве боба. это то, что должна делать аннотация PropertySource. В любом случае, избегайте использования new с Spring. Особенно для весенних занятий. Если вы делаете это, скорее всего, это ошибка.

Кстати, скорее всего, неверный URL-адрес config.properties и должен быть просто @PropertySource("classpath:config.properties") или, возможно, @PropertySource("classpath:/config.properties")

...