Подтвердить что ты не робот

Настройте DataSource программно в Spring Boot

С помощью Spring загрузки я могу создать экземпляр JdbcTemplate со следующим:

код:

@Autowired
private JdbcTemplate jdbcTemplate;

Свойства:

spring.datasource.url=jdbc:postgresql://my_url:my_port/my_other_stuff
spring.datasource.username=my_user_name
spring.datasource.password=my_password
spring.datasource.driver-class-name=org.postgresql.Driver

Это создаст DataSource класса: org.apache.tomcat.jdbc.pool.DataSource

Как я могу установить имя пользователя/пароль DataSource программно?

У нас есть политика не хранить учетные данные в текстовом формате, и я должен использовать определенный поставщик учетных данных, где я работаю.

4b9b3361

Ответ 1

Вы можете использовать DataSourceBuilder, если вы используете стартер jdbc. Кроме того, чтобы переопределить автоконфигурацию по умолчанию bean, вам необходимо пометить bean как @Primary

В моем случае у меня есть свойства, начинающиеся с префикса datasource.postgres.

например

@ConfigurationProperties(prefix = "datasource.postgres")
@Bean
@Primary
public DataSource dataSource() {
    return DataSourceBuilder
        .create()
        .build();
}

Если это невозможно для вас, вы можете использовать

@Bean
@Primary
public DataSource dataSource() {
    return DataSourceBuilder
        .create()
        .username("")
        .password("")
        .url("")
        .driverClassName("")
        .build();
}

Ответ 2

Все, что вам нужно сделать, это аннотировать метод, который возвращает DataSource с помощью @Bean. Ниже приведен полный рабочий пример.

@Bean
public DataSource dataSource() {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.url(dbUrl);
        dataSourceBuilder.username(username);
        dataSourceBuilder.password(password);
        return dataSourceBuilder.build();   
}

Ответ 3

Спасибо, мой проект spring -boot работает нормально в соответствии с вашей помощью, моя конфигурация источника данных в моем проекте ниже:

**configuration in application.yml** 
spring:
  # (DataSourceAutoConfiguration & DataSourceProperties)
  datasource:
    name: ds-h2
    url: jdbc:h2:D:/work/workspace/fdata;DATABASE_TO_UPPER=false
    username: h2
    password: h2
    driver-class: org.h2.Driver

Пользовательский источник данных

@Configuration
@Component
public class DataSourceBean {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    @Primary
    public DataSource getDataSource() {
        return DataSourceBuilder
                .create()
//                .url("jdbc:h2:D:/work/workspace/fork/gs-serving-web-content/initial/data/fdata;DATABASE_TO_UPPER=false")
//                .username("h2")
//                .password("h2")
//                .driverClassName("org.h2.Driver")
                .build();
    }
}

Ответ 4

Если вы хотите больше конфигураций дат-источников, например

spring.datasource.test-while-idle=true 
spring.datasource.time-between-eviction-runs-millis=30000
spring.datasource.validation-query=select 1

вы можете использовать ниже код

@Bean
public DataSource dataSource() {
    DataSource dataSource = new DataSource(); // org.apache.tomcat.jdbc.pool.DataSource;
    dataSource.setDriverClassName(driverClassName);
    dataSource.setUrl(url);
    dataSource.setUsername(username);
    dataSource.setPassword(password);
    dataSource.setTestWhileIdle(testWhileIdle);     
    dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMills);
    dataSource.setValidationQuery(validationQuery);
    return dataSource;
}

обратитесь: Spring boot jdbc Connection