diff --git a/src/main/java/com/ehsaniara/multidatasource/DemoApplication.java b/src/main/java/com/ehsaniara/multidatasource/DemoApplication.java index 3a032e0..7e407fe 100644 --- a/src/main/java/com/ehsaniara/multidatasource/DemoApplication.java +++ b/src/main/java/com/ehsaniara/multidatasource/DemoApplication.java @@ -3,21 +3,11 @@ package com.ehsaniara.multidatasource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import java.util.Properties; - @SpringBootApplication public class DemoApplication { public final static String MODEL_PACKAGE = "com.ehsaniara.multidatasource.model"; - public final static Properties JPA_PROPERTIES = new Properties() {{ - put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL10Dialect"); - put("hibernate.hbm2ddl.auto", "update"); - put("hibernate.ddl-auto", "update"); - put("show-sql", "true"); - }}; - - public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } diff --git a/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigRead.java b/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigRead.java index 9cc3906..ee274a3 100644 --- a/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigRead.java +++ b/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigRead.java @@ -1,6 +1,5 @@ package com.ehsaniara.multidatasource.configurations; -import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.hibernate.jpa.HibernatePersistenceProvider; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -14,7 +13,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.persistence.EntityManagerFactory; -import static com.ehsaniara.multidatasource.DemoApplication.JPA_PROPERTIES; import static com.ehsaniara.multidatasource.DemoApplication.MODEL_PACKAGE; /** @@ -28,10 +26,11 @@ import static com.ehsaniara.multidatasource.DemoApplication.MODEL_PACKAGE; transactionManagerRef = "transactionManagerRead", basePackages = {"com.ehsaniara.multidatasource.repository.readRepository"} ) -public class DataSourceConfigRead extends HikariConfig { - - public final static String PERSISTENCE_UNIT_NAME = "read"; +public class DataSourceConfigRead extends HikariConfigRead { + public DataSourceConfigRead(HikariReadProperties hikariReadProperties) { + super(hikariReadProperties); + } @Bean public HikariDataSource dataSourceRead() { @@ -47,7 +46,7 @@ public class DataSourceConfigRead extends HikariConfig { setPersistenceProviderClass(HibernatePersistenceProvider.class); setPersistenceUnitName(PERSISTENCE_UNIT_NAME); setPackagesToScan(MODEL_PACKAGE); - setJpaProperties(JPA_PROPERTIES); + setJpaProperties(JPA_READ_PROPERTIES); }}; } diff --git a/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigWrite.java b/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigWrite.java index 75372a2..56b2a82 100644 --- a/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigWrite.java +++ b/src/main/java/com/ehsaniara/multidatasource/configurations/DataSourceConfigWrite.java @@ -1,6 +1,5 @@ package com.ehsaniara.multidatasource.configurations; -import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.hibernate.jpa.HibernatePersistenceProvider; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -14,7 +13,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.persistence.EntityManagerFactory; -import static com.ehsaniara.multidatasource.DemoApplication.JPA_PROPERTIES; import static com.ehsaniara.multidatasource.DemoApplication.MODEL_PACKAGE; /** @@ -28,9 +26,11 @@ import static com.ehsaniara.multidatasource.DemoApplication.MODEL_PACKAGE; transactionManagerRef = "transactionManagerWrite", basePackages = {"com.ehsaniara.multidatasource.repository.writeRepository"} ) -public class DataSourceConfigWrite extends HikariConfig { +public class DataSourceConfigWrite extends HikariConfigWrite { - public final static String PERSISTENCE_UNIT_NAME = "write"; + public DataSourceConfigWrite(HikariWriteProperties hikariWriteProperties) { + super(hikariWriteProperties); + } @Bean public HikariDataSource dataSourceWrite() { @@ -46,7 +46,7 @@ public class DataSourceConfigWrite extends HikariConfig { setPersistenceProviderClass(HibernatePersistenceProvider.class); setPersistenceUnitName(PERSISTENCE_UNIT_NAME); setPackagesToScan(MODEL_PACKAGE); - setJpaProperties(JPA_PROPERTIES); + setJpaProperties(JPA_WRITE_PROPERTIES); }}; } diff --git a/src/main/java/com/ehsaniara/multidatasource/configurations/HikariConfigRead.java b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariConfigRead.java new file mode 100644 index 0000000..3d3274e --- /dev/null +++ b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariConfigRead.java @@ -0,0 +1,27 @@ +package com.ehsaniara.multidatasource.configurations; + +import com.zaxxer.hikari.HikariConfig; + +import java.util.Properties; + +public class HikariConfigRead extends HikariConfig { + + protected final HikariReadProperties hikariReadProperties; + + protected final String PERSISTENCE_UNIT_NAME = "read"; + + protected final Properties JPA_READ_PROPERTIES = new Properties() {{ + put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL10Dialect"); + put("hibernate.hbm2ddl.auto", "update"); + put("hibernate.ddl-auto", "update"); + put("show-sql", "true"); + }}; + + protected HikariConfigRead(HikariReadProperties hikariReadProperties) { + this.hikariReadProperties = hikariReadProperties; + setPoolName(this.hikariReadProperties.getPoolName()); + setMinimumIdle(this.hikariReadProperties.getMinimumIdle()); + setMaximumPoolSize(this.hikariReadProperties.getMaximumPoolSize()); + setIdleTimeout(this.hikariReadProperties.getIdleTimeout()); + } +} diff --git a/src/main/java/com/ehsaniara/multidatasource/configurations/HikariConfigWrite.java b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariConfigWrite.java new file mode 100644 index 0000000..a2446e2 --- /dev/null +++ b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariConfigWrite.java @@ -0,0 +1,27 @@ +package com.ehsaniara.multidatasource.configurations; + +import com.zaxxer.hikari.HikariConfig; + +import java.util.Properties; + +public class HikariConfigWrite extends HikariConfig { + + protected final HikariWriteProperties hikariWriteProperties; + + protected final String PERSISTENCE_UNIT_NAME = "write"; + + protected final Properties JPA_WRITE_PROPERTIES = new Properties() {{ + put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL10Dialect"); + put("hibernate.hbm2ddl.auto", "update"); + put("hibernate.ddl-auto", "update"); + put("show-sql", "true"); + }}; + + protected HikariConfigWrite(HikariWriteProperties hikariWriteProperties) { + this.hikariWriteProperties = hikariWriteProperties; + setPoolName(this.hikariWriteProperties.getPoolName()); + setMinimumIdle(this.hikariWriteProperties.getMinimumIdle()); + setMaximumPoolSize(this.hikariWriteProperties.getMaximumPoolSize()); + setIdleTimeout(this.hikariWriteProperties.getIdleTimeout()); + } +} diff --git a/src/main/java/com/ehsaniara/multidatasource/configurations/HikariReadProperties.java b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariReadProperties.java new file mode 100644 index 0000000..e79640a --- /dev/null +++ b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariReadProperties.java @@ -0,0 +1,23 @@ +package com.ehsaniara.multidatasource.configurations; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Setter +@Getter +@Configuration +@PropertySource("classpath:application.yml") +@ConfigurationProperties("spring.datasource-read.hikari") +public class HikariReadProperties { + + private String poolName; + + private int minimumIdle; + + private int maximumPoolSize; + + private int idleTimeout; +} diff --git a/src/main/java/com/ehsaniara/multidatasource/configurations/HikariWriteProperties.java b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariWriteProperties.java new file mode 100644 index 0000000..19bda6c --- /dev/null +++ b/src/main/java/com/ehsaniara/multidatasource/configurations/HikariWriteProperties.java @@ -0,0 +1,23 @@ +package com.ehsaniara.multidatasource.configurations; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Setter +@Getter +@Configuration +@PropertySource("classpath:application.yml") +@ConfigurationProperties("spring.datasource-write.hikari") +public class HikariWriteProperties { + + private String poolName; + + private int minimumIdle; + + private int maximumPoolSize; + + private int idleTimeout; +}