Skip to content

Instantly share code, notes, and snippets.

@gksxodnd007
Created August 13, 2018 01:50
Show Gist options
  • Save gksxodnd007/4d248ab87f17b1d45a8bbf3bbc439bdf to your computer and use it in GitHub Desktop.
Save gksxodnd007/4d248ab87f17b1d45a8bbf3bbc439bdf to your computer and use it in GitHub Desktop.
properties 파일 값을 읽어오는 방법

config xx.properties with Spring boot

1. @PropertySource 와 @Value를 이용한 방법

@Configuration
@PropertySource("classpath:sandbox_db.properties")
public class SandBoxDBConfig {

    @Value("${datasource.slave.driver-class-name}")
    private String driverClassName;

    @Value("${datasource.slave.url}")
    private String url;

    @Value("${datasource.slave.user-name}")
    private String username;

    @Value("${datasource.slave.password}")
    private String password;

    @Value("${datasource.slave.maximum-pool-size}")
    private int maximumPoolSize;

    @Value("${datasource.slave.minimum-idle}")
    private int minimumIdle;

    @Value("${datasource.slave.read-only}")
    private boolean isReadOnly;

    @Bean(name = "remoteDataSource", destroyMethod = "close")
    public HikariDataSource remoteDataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setMaximumPoolSize(maximumPoolSize);
        dataSource.setMinimumIdle(minimumIdle);
        dataSource.setReadOnly(isReadOnly);

        return dataSource;
    }

}
## sandbox_db.properties
datasource.slave.driver-class-name=com.mysql.jdbc.Driver
datasource.slave.url=jdbc:mysql://localhost:3306/sandbox?cacheServerConfiguration=true&zeroDateTimeBehavior=convertToNull&autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&useSSL=false
datasource.slave.user-name=hello
datasource.slave.password=hello
datasource.slave.maximum-pool-size=1
datasource.slave.minimum-idle=1
datasource.slave.read-only=true

2. @ConfigurationProperties를 이용한 방법

@Data
public class HibernateProperties {

    private String dialect;
    private boolean sqlFormat;
    private String hbm2ddlAuto;
    private boolean generateDdl;

}

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "hibernate")
@PropertySource("classpath:local_hibernate.properties")
public class LocalHibernateProperties extends HibernateProperties {
}

//LocalHibernateProperties 사용 예 -> LocalJpaConfig.java class의 @Bean 메서드
@Bean(name = "localEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Qualifier("localDataSource") DataSource localDataSource, LocalHibernateProperties localHibernateProperties) {
    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(localDataSource);
    em.setPackagesToScan("org.batch.demo.entity.local");
    em.setPersistenceUnitName("local");

    HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
    jpaVendorAdapter.setShowSql(true);
    jpaVendorAdapter.setGenerateDdl(true);

    em.setJpaVendorAdapter(jpaVendorAdapter);

    Properties properties = new Properties();
    properties.put("hibernate.dialect", localHibernateProperties.getDialect());
    properties.put("hibernate.format_sql", localHibernateProperties.isSqlFormat());
    properties.put("hibernate.hbm2ddl.auto", localHibernateProperties.getHbm2ddlAuto());

    em.setJpaProperties(properties);
    return em;
}
## jpa properties
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.sqlFormat=true
hibernate.hbm2ddlAuto=update
hibernate.generateDdl=false
  • 후자의 방법을 권장.
@gksxodnd007
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment