working with what source query que example data java spring datasource spring-boot credential-providers

java - with - Configure DataSource mediante programación en Spring Boot



what is jndi datasource in java (7)

Con Spring Boot puedo crear una instancia de JdbcTemplate con lo siguiente:

Código:

@Autowired private JdbcTemplate jdbcTemplate;

Propiedades:

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

Esto crea un DataSource de clase: org.apache.tomcat.jdbc.pool.DataSource

¿Cómo configuro el nombre de usuario / contraseña de DataSource mediante programación?

Tenemos una política de no almacenar credenciales en texto sin formato y tengo que usar un proveedor de credenciales específico donde trabajo.


Como alternativa, puede usar DriverManagerDataSource como:

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

Sin embargo, tenga cuidado al usarlo, porque:

NOTA: esta clase no es un grupo de conexiones real; en realidad no agrupa las conexiones. Simplemente sirve como un reemplazo simple para un grupo de conexiones completo, implementando la misma interfaz estándar, pero creando nuevas conexiones en cada llamada. reference


Mi proyecto de arranque de primavera se ha ejecutado normalmente de acuerdo con su ayuda. La configuración del origen de datos yaml es:

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

Fuente de datos personalizada

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


Puede usar DataSourceBuilder si está usando jdbc starter. Además, para anular el bean de configuración automática predeterminado, debe marcar su bean como @Primary

En mi caso, tengo propiedades que comienzan con el prefijo datasource.postgres .

P.ej

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

Si no es factible para usted, puede usar

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


Si desea más configuraciones de fuente de fechas, por ejemplo

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

podrías usar el siguiente código

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

consulte: Spring boot jdbc Connection


Si está utilizando el último arranque de primavera (con jdbc starter y Hikari), se encontrará con: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName. Para resolver esto:

  1. En su application.properties:

datasource.oracle.url=youroracleurl

  1. En su aplicación, defina como bean (¡ @Primary es obligatorio! ):

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


Todo lo que necesita hacer es anotar un método que devuelva un DataSource con @Bean. Sigue un ejemplo de trabajo completo.

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


para springboot 2.1.7, trabajar con url parece no funcionar. cambie con jdbcUrl en su lugar.

En propiedades:

security: datasource: jdbcUrl: jdbc:mysql://ip:3306/security username: user password: pass

En java:

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