[SPRING] Spring Boot에서 프로그래밍 방식으로 DataSource 설정하기
SPRINGSpring Boot에서 프로그래밍 방식으로 DataSource 설정하기
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를 생성한다.
프로그래밍 방식으로 DataSource 사용자 이름 / 암호를 어떻게 설정합니까?
Google은 일반 텍스트로 자격 증명을 저장하지 않는 정책을 가지고 있으며 내가 일하는 특정 자격 공급자를 사용해야합니다.
해결법
-
==============================
1.jdbc 스타터를 사용하는 경우 DataSourceBuilder를 사용할 수 있습니다. 또한 기본 자동 구성 bean을 겹쳐 쓰려면 bean을 @Primary로 표시해야합니다
jdbc 스타터를 사용하는 경우 DataSourceBuilder를 사용할 수 있습니다. 또한 기본 자동 구성 bean을 겹쳐 쓰려면 bean을 @Primary로 표시해야합니다
제 경우에는 datasource.postgres 접두사로 시작하는 속성이 있습니다.
Eq
@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(); }
-
==============================
2.귀하의 도움에 따라 스프링 부트 프로젝트가 정상적으로 실행되었습니다. yaml 데이터 소스 설정은 다음과 같습니다 :
귀하의 도움에 따라 스프링 부트 프로젝트가 정상적으로 실행되었습니다. 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(); } }
-
==============================
3.@Bean을 사용하여 DataSource를 반환하는 메서드에 주석을다는 것만하면됩니다. 완전한 작업 예제는 다음과 같습니다.
@Bean을 사용하여 DataSource를 반환하는 메서드에 주석을다는 것만하면됩니다. 완전한 작업 예제는 다음과 같습니다.
@Bean public DataSource dataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.url(dbUrl); dataSourceBuilder.username(username); dataSourceBuilder.password(password); return dataSourceBuilder.build(); }
-
==============================
4.예를 들어 더 많은 날짜 소스 구성을 원한다면.
예를 들어 더 많은 날짜 소스 구성을 원한다면.
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 연결
-
==============================
5.다른 방법으로 다음과 같은 DriverManagerDataSource를 사용할 수 있습니다.
다른 방법으로 다음과 같은 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; }
그러나 다음과 같은 이유로 사용에주의하십시오.
-
==============================
6.최신 스프링 부트 (jdbc 스타터 및 히카리 포함)를 사용하는 경우 다음과 같이 실행됩니다. java.lang.IllegalArgumentException : driverClassName에 jdbcUrl이 필요합니다. 이것을 해결하려면 :
최신 스프링 부트 (jdbc 스타터 및 히카리 포함)를 사용하는 경우 다음과 같이 실행됩니다. java.lang.IllegalArgumentException : driverClassName에 jdbcUrl이 필요합니다. 이것을 해결하려면 :
datasource.oracle.url = youroracleurl
@콩 @행성 @ConfigurationProperties ( "datasource.oracle") 공용 DataSourceProperties getDatasourceProperties () { 새 DataSourceProperties ()를 반환하십시오. }
@Bean @ConfigurationProperties("datasource.oracle") public DataSource getDatasource() { return getDatasourceProperties().initializeDataSourceBuilder() .username("username") .password("password") .build(); }
그렇게하면 런타임 중에 중요한 속성 / 동적 속성을 제공하면서 application.properties에서 변경되지 않거나 무시되는 설정을 지정할 수 있습니다.
from https://stackoverflow.com/questions/28821521/configure-datasource-programmatically-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트에서 HTTP 응답 캐싱을 사용하는 방법 (0) | 2018.12.11 |
---|---|
[SPRING] Spring 부트 애플리케이션의 환경 특정 application.properties 파일 (0) | 2018.12.11 |
[SPRING] Spring 관리 컨텍스트 외부의 클래스에 bean 삽입 (0) | 2018.12.11 |
[SPRING] Jackson JSON을 사용하여 Spring MVC에서 JSON 구문 분석하기 (0) | 2018.12.11 |
[SPRING] @Cacheable에 TTL을 설정할 수 있습니까? (0) | 2018.12.11 |