@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties("datasource.primary")
public DataSource primaryDataSource() {
    // data.primary.hikari.* 같은 속성이 HikariConfig에 적용되지 않음
    return DataSourceBuilder.create().type(HikariDataSource.class).build();
}

 

datasource:
  primary:
    url: jdbc:mysql://localhost:3306/primarydb
    username: primary_user
    password: primary_pass
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 10
      pool-name: PrimaryHikariPool

DataSourceBuilder.create().type(HikariDataSource.class).build()로 기본 객체 생성 후 @ConfigurationProperties를 적용하여 yml/properties값을 setter로 채워 넣음

메소드에 사용시 기본객체 생성 => setter로 값 채움


https://stackoverflow.com/questions/43232021/using-configurationproperties-annotation-on-bean-method

Using `@ConfigurationProperties` annotation on `@Bean` Method

Could someone give a MWE of how to use the @ConfigurationProperties annotation directly on a @Bean method? I have seen countless examples of it being used on class definitions - but no examples ye...

stackoverflow.com



- HikariDataSource 자바클래스로 설정

@Bean
@ConfigurationProperties("datasource.primary")
DataSourceProperties primaryDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties("datasource.primary.hikari")
HikariConfig primaryHikariConfig() {
    return new HikariConfig();
}

@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties("datasource.primary")
DataSource primaryDataSource(DataSourceProperties properties,
                             HikariConfig primaryHikariConfig) {

    hikariConfig.setJdbcUrl(properties.getUrl());
    hikariConfig.setUsername(properties.getUsername());
    hikariConfig.setPassword(properties.getPassword());
    hikariConfig.setDriverClassName(properties.getDriverClassName());

    return new HikariDataSource(hikariConfig);
}

 

datasource:
  primary:
    jdbc-url: jdbc:mysql://localhost:3306/testdb
    username: root
    password: 1234
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      connection-timeout: 30000


- List에 값 주입

@Bean
@ConfigutationProperties(prefix="logging.level")
public List<String> getList() {
    return new ArrayList<String>();
}






####################
@Value로 List 주입

logging:
  level:
    - INFO
    - WARN
    - ERROR

 

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class LoggingConfig {

    @Value("${logging.level}")
    private List<String> levels;

    public void printLevels() {
        System.out.println("Logging Levels: " + levels);
    }
}
Logging Levels: [INFO, WARN, ERROR]

 

'spring-boot' 카테고리의 다른 글

@Conditional 조건별 Bean 생성  (0) 2025.04.29
RestClient  (0) 2024.10.05
Serve Static Resources with Spring  (0) 2024.09.27
spring-boot Grpc  (0) 2023.12.20
spring-boot-starter-parent 설정 - gradle & maven  (0) 2023.11.27
Posted by 張's blog
,