Настройка пула соединений в Spring с использованием свойств базы данных в коде Java - PullRequest
0 голосов
/ 13 февраля 2019

Мне нужно настроить пул подключений в веб-приложении.Используя common-dbcp, я написал:

@Configuration
public class SpringConfig {
    @Bean
    @Singleton
    public DataSource getDataSource() {
        BasicDataSource basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        basicDataSource.setUrl("jdbc:mysql://localhost:3306/db?serverTimezone=UTC");
        basicDataSource.setUsername("name");
        basicDataSource.setPassword("password");
        basicDataSource.setInitialSize(5);
        basicDataSource.setMinIdle(3);
        basicDataSource.setMaxIdle(15);
        basicDataSource.setMaxWait(10000);
        basicDataSource.setMaxActive(100);
        return basicDataSource;
    }
}

Я пытаюсь настроить его с помощью файла database.properties.

    @Configuration
    @PropertySource("classpath:database.properties")
    public class SpringConfig {
        private @Value("${propertyName}") String propertyField;

        @Bean
        @Singleton
        public DataSource getDataSource() {
            BasicDataSource basicDataSource = new BasicDataSource();
            basicDataSource.setConnectionProperties(propertyField);
            return basicDataSource;
        }
    }

Я создал database.properties и поместил его в каталог src / main / resources .Содержание следующее:

driverClassName = "com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/db"
username="user"
password="password"

Но оно говорит мне: " свойство не используется" .Что я делаю не так?

ОБНОВЛЕНИЕ
Решение :

@Configuration
@PropertySource("classpath:/database.properties")
public class SpringConfig {
    @Autowired
    Environment environment;

    @Bean
    @Singleton
    public DataSource getDataSource() {
            BasicDataSource basicDataSource = new BasicDataSource();
            basicDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            basicDataSource.setUrl("jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC");
            basicDataSource.setUsername(environment.getProperty("username"));
            basicDataSource.setPassword(environment.getProperty("password"));
            ..other actions is here
       }
}

Важно:
Вы должны setUserName() и setPassword() в следующем порядке перед другими настройками.

1 Ответ

0 голосов
/ 13 февраля 2019

Я предполагаю, что эта конфигурация не для тестов, потому что тесты требуют другой аннотации.Вы упоминаете, что файл находится в папке ресурсов.Можете ли вы подтвердить, что это src / main / resources?Как подробно здесь , вам также не нужна аннотация @PropertySource.Вы также пытаетесь использовать свойство jvm "--spring.config.location = classpath: /another-location.properties", как описано здесь в качестве примера.

...