Spring Boot에서 프로그래밍 방식으로 DataSource 구성
Spring Boot를 JdbcTemplate
사용하면 다음을 사용하여 a 를 인스턴스화 할 수 있습니다 .
암호:
@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
이렇게하면 클래스의 DataSource가 생성됩니다. org.apache.tomcat.jdbc.pool.DataSource
프로그래밍 방식으로 DataSource 사용자 이름 / 암호를 어떻게 설정합니까?
자격 증명을 일반 텍스트로 저장하지 않는 정책이 있으며 내가 일하는 특정 자격 증명 공급자를 사용해야합니다.
스타터를 사용하는 DataSourceBuilder
경우 사용할 수 있습니다 jdbc
. 또한 기본 자동 구성 빈을 재정의하려면 빈을 다음과 같이 표시해야합니다.@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();
}
더 많은 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 Connection
최신 스프링 부트 (jdbc 스타터 및 Hikari 사용)를 사용하는 경우 다음과 같은 java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
문제가 발생합니다.이 문제를 해결하려면 :
- application.properties에서 :
datasource.oracle.url=youroracleurl
- 애플리케이션에서 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();
}
다른 방법으로 다음과 같은 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;
}
그러나 다음과 같은 이유로 사용에주의하십시오.
NOTE: This class is not an actual connection pool; it does not actually pool Connections. It just serves as simple replacement for a full-blown connection pool, implementing the same standard interface, but creating new Connections on every call. reference
for springboot 2.1.7 working with url seems not to work. change with jdbcUrl instead.
In properties:
security:
datasource:
jdbcUrl: jdbc:mysql://ip:3306/security
username: user
password: pass
In java:
@ConfigurationProperties(prefix = "security.datasource")
@Bean("dataSource")
@Primary
public DataSource dataSource(){
return DataSourceBuilder
.create()
.build();
}
ReferenceURL : https://stackoverflow.com/questions/28821521/configure-datasource-programmatically-in-spring-boot
'IT story' 카테고리의 다른 글
잘못된 익명 형식 멤버 선언자 (0) | 2020.12.29 |
---|---|
“Prepare for Submission”상태의 itunesconnect 앱을 삭제하는 방법은 무엇입니까? (0) | 2020.12.29 |
Android 6.0 열기 실패 : EACCES (권한 거부 됨) (0) | 2020.12.29 |
Enum을 가져 오는 방법 (0) | 2020.12.29 |
HTML에 PowerPoint 프레젠테이션 포함 (0) | 2020.12.29 |