Programowa konfiguracja DataSource podczas wiosennego rozruchu

Z wiosennym butem mogę utworzyć instancję JdbcTemplate z następującym:

Kod:

@Autowired
private JdbcTemplate jdbcTemplate;

Właściwości:

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

To tworzy źródło danych klasy: org.apache.tomcat.jdbc.pool.DataSource

Jak programowo ustawić nazwę użytkownika/hasło źródła danych?

Mamy zasadę, aby nie przechowywać poświadczeń w zwykłym tekście i muszę użyć konkretnego dostawcy poświadczeń, w którym pracuję.

Author: Gevorg, 2015-03-03

6 answers

Możesz użyć DataSourceBuilder Jeśli używasz jdbc starter. Ponadto, aby zastąpić domyślną autokonfigurację bean, musisz oznaczyć Bean jako @Primary

W moim przypadku mam właściwości zaczynające się od prefiksu datasource.postgres.

E. G

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

Jeśli nie jest to dla Ciebie wykonalne, możesz użyć

@Bean
@Primary
public DataSource dataSource() {
    return DataSourceBuilder
        .create()
        .username("")
        .password("")
        .url("")
        .driverClassName("")
        .build();
}
 63
Author: Eddú Meléndez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-09 09:45:44

Mój projekt spring-boot działa normalnie zgodnie z twoją pomocą. Konfiguracja yaml datasource to:

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

Custom DataSource

@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();
    }
}
 12
Author: Alfer Wei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-27 20:42:55

Wystarczy dodać adnotację do metody, która zwraca źródło danych za pomocą @Bean. Poniżej znajduje się kompletny przykład roboczy.

@Bean
public DataSource dataSource() {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.url(dbUrl);
        dataSourceBuilder.username(username);
        dataSourceBuilder.password(password);
        return dataSourceBuilder.build();   
}
 10
Author: Rodrigo Villalba Zayas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-08 19:24:19

Jeśli chcesz więcej datesource configs np.

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

Możesz użyć poniższego kodu

@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;
}

Zobacz: Spring Boot JDBC Connection

 3
Author: zhuguowei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:51

Jako alternatywny sposób możesz użyć DriverManagerDataSource np.:

public DataSource getDataSource(DBInfo db) {

    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    dataSource.setUsername(db.getUsername());
    dataSource.setPassword(db.getPassword());
    dataSource.setUrl(db.getUrl());
    dataSource.setDriverClassName(db.getDriverClassName());

    return dataSource;
}

Należy jednak uważać na używanie go, ponieważ:

Uwaga: Ta klasa nie jest rzeczywistą pulą połączeń; nie właściwie połączenia z basenem. Służy tylko jako prosty zamiennik dla pełnowymiarowa Pula połączeń, implementująca ten sam standardowy interfejs, ale tworzenie nowych połączeń przy każdym połączeniu. reference

 1
Author: MMKarami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 13:53:01

Jeśli używasz najnowszego wiosennego buta (z JDBC starter i Hikari), napotkasz: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName. Aby rozwiązać ten problem:

  1. w Twojej aplikacji.właściwości:

datasource.oracle.url=youroracleurl

  1. w aplikacji zdefiniuj jako bean (@Primary jest obowiązkowe!):

@Bean @Primary @ConfigurationProperties("datasource.oracle") public DataSourceProperties getDatasourceProperties() { return new DataSourceProperties(); }

@Bean
@ConfigurationProperties("datasource.oracle")
public DataSource getDatasource() {
return getDatasourceProperties().initializeDataSourceBuilder()
.username("username")
.password("password")
.build();
}

W ten sposób można określić pewne niezmienne / niewrażliwe ustawienia w aplikacji.właściwości, podczas dostarczania wrażliwych / dynamicznych podczas runtime

 0
Author: ACV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 15:34:24