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ę.
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();
}
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();
}
}
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();
}
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
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
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:
- w Twojej aplikacji.właściwości:
datasource.oracle.url=youroracleurl
- 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
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