Настройте 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 программно?
У нас есть политика не хранить учетные данные в текстовом формате, и я должен использовать определенный поставщик учетных данных, где я работаю.
Ответы
Ответ 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