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
후자의 방법을 권장하는데는 어떤 이유가 있는지 알 수 있을까요?