복붙노트

[SPRING] Spring Boot에서 프로그래밍 방식으로 DataSource 설정하기

SPRING

Spring 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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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에서 변경되지 않거나 무시되는 설정을 지정할 수 있습니다.

  7. from https://stackoverflow.com/questions/28821521/configure-datasource-programmatically-in-spring-boot by cc-by-sa and MIT license