天天看點

java datasource使用_java-在Spring B中以程式設計方式配置DataSource

java-在Spring B中以程式設計方式配置DataSource

使用Spring Boot,我可以使用以下執行個體化org.apache.tomcat.jdbc.pool.DataSource:

碼:

@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

如何以程式設計方式設定DataSource使用者名/密碼?

我們有一項政策,不要以純文字形式存儲憑據,我必須在工作的地方使用特定的憑據提供程式。

7個解決方案

79 votes

如果使用的是datasource.postgres起動器,則可以使用DataSourceBuilder。 另外,為了覆寫預設的自動配置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();

}

Eddú Meléndez answered 2019-11-05T19:46:59Z

20 votes

我的spring-boot項目在您的協助下已正常運作。 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();

}

}

Alfer Wei answered 2019-11-05T19:47:29Z

11 votes

您需要做的就是用@Bean注釋一個傳回DataSource的方法。下面是一個完整的工作示例。

@Bean

public DataSource dataSource() {

DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();

dataSourceBuilder.url(dbUrl);

dataSourceBuilder.username(username);

dataSourceBuilder.password(password);

return dataSourceBuilder.build();

}

Rodrigo Villalba Zayas answered 2019-11-05T19:47:53Z

5 votes

如果您使用的是最新的Spring Boot(帶有jdbc啟動器和Hikari),則會遇到:@Primary要解決這個問題:

在您的application.properties中:

@Primary

在您的應用程式中,将其定義為bean(@Primary是必需的!):

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

}

ACV answered 2019-11-05T19:48:37Z

4 votes

如果您想要更多的datesource配置,例如

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連接配接

zhuguowei answered 2019-11-05T19:49:14Z

2 votes

作為替代方法,您可以使用DriverManagerDataSource,例如:

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;

}

但是,請謹慎使用它,因為:

注意:此類不是實際的連接配接池; 它不是   實際上合并連接配接。 它隻是作為一個簡單的替代品   功能完善的連接配接池,實作相同的标準接口,   但會在每次通話時建立新的連接配接。 參考

MMKarami answered 2019-11-05T19:49:52Z

0 votes

對于Spring Boot 2.1.7,使用url似乎無法正常工作。 改為使用jdbc Url。

在屬性中:

security:

datasource:

jdbcUrl: jdbc:mysql://ip:3306/security

username: user

password: pass

在Java中:

@ConfigurationProperties(prefix = "security.datasource")

@Bean("dataSource")

@Primary

public DataSource dataSource(){

return DataSourceBuilder

.create()

.build();

}

Christian Altamirano Ayala answered 2019-11-05T19:50:29Z