在 Spring Boot 中以编程方式配置数据源

使用Spring Boot,我可以用以下内容实例化a: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

这将创建类的数据源:org.apache.tomcat.jdbc.pool.DataSource

如何以编程方式设置数据源用户名/密码?

我们有一个不以纯文本形式存储凭据的策略,我必须使用我工作的特定凭据提供程序。


答案 1

如果您使用的是初学者,则可以使用。另外,为了覆盖默认的自动配置bean,您需要将Bean标记为DataSourceBuilderjdbc@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

根据您的帮助,我的弹簧靴项目已正常运行。yaml 数据源配置如下:

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();
    }
}

推荐