Spring Bootを使用すると、次のように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
DataSourceのユーザー名/パスワードをプログラムで設定するにはどうすればよいですか?
資格情報をプレーンテキストで保存しないというポリシーがあり、私は職場で特定の資格情報プロバイダーを使用する必要があります。
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();
}
スプリングブートの私のプロジェクトは、あなたの支援に従って正常に実行されました。 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();
}
}
行う必要があるのは、@ BeanでDataSourceを返すメソッドに注釈を付けることだけです。完全な作業例を次に示します。
@Bean
public DataSource dataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.url(dbUrl);
dataSourceBuilder.username(username);
dataSourceBuilder.password(password);
return dataSourceBuilder.build();
}
より多くの日付ソース設定が必要な場合、例えば.
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;
}
最新のスプリングブート(jdbcスターターとHikariを使用)を使用している場合は、次のことに遭遇します。Java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
これを解決するには:
datasource.Oracle.url=youroracleurl
@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();
}
別の方法として、次のような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;
}
ただし、次の理由から使用には注意してください。
注:このクラスは実際の接続プールではありません。実際には接続をプールしません。本格的な接続プールの単純な置き換えとして機能し、同じ標準インターフェイスを実装しますが、呼び出しごとに新しい接続を作成します。 参照