@ -38,60 +38,53 @@ import org.thingsboard.server.dao.model.sql.StatisticsEventEntity;
import javax.sql.DataSource ;
import java.util.Objects ;
/ *
* To make entity use a dedicated datasource :
* - add its JpaRepository to exclusions list in @EnableJpaRepositories in JpaDaoConfig
* - add the package of this JpaRepository to @EnableJpaRepositories in DefaultDedicatedJpaDaoConfig
* - add the package of this JpaRepository to @EnableJpaRepositories in DedicatedJpaDaoConfig
* - add the entity class to packages list in dedicatedEntityManagerFactory in DedicatedJpaDaoConfig
* * /
@DedicatedDataSource
@DedicatedEventsDataSource
@Configuration
@EnableJpaRepositories ( value = { "org.thingsboard.server.dao.sql.event" , "org.thingsboard.server.dao.sql.audit" } ,
bootstrapMode = BootstrapMode . LAZY ,
entityManagerFactoryRef = "dedicated EntityManagerFactory" , transactionManagerRef = "dedicated TransactionManager" )
public class DedicatedJpaDaoConfig {
entityManagerFactoryRef = "eventsEntityManagerFactory" , transactionManagerRef = "eventsTransactionManager" )
public class DedicatedEventsJpaDaoConfig {
public static final String DEDICATED_PERSISTENCE_UNIT = "dedicated ";
public static final String DEDICATED_TRANSACTION_MANAGER = DEDICATED _PERSISTENCE_UNIT + "TransactionManager" ;
public static final String DEDICATED_TRANSACTION_TEMPLATE = DEDICATED _PERSISTENCE_UNIT + "TransactionTemplate" ;
public static final String DEDICATED_JDBC_TEMPLATE = DEDICATED _PERSISTENCE_UNIT + "JdbcTemplate" ;
public static final String EVENTS_PERSISTENCE_UNIT = "events" ;
public static final String EVENTS_TRANSACTION_MANAGER = EVENTS _PERSISTENCE_UNIT + "TransactionManager" ;
public static final String EVENTS_TRANSACTION_TEMPLATE = EVENTS _PERSISTENCE_UNIT + "TransactionTemplate" ;
public static final String EVENTS_JDBC_TEMPLATE = EVENTS _PERSISTENCE_UNIT + "JdbcTemplate" ;
@Bean
@ConfigurationProperties ( "spring.datasource.dedicated " )
public DataSourceProperties dedicated DataSourceProperties( ) {
@ConfigurationProperties ( "spring.datasource.events " )
public DataSourceProperties events DataSourceProperties( ) {
return new DataSourceProperties ( ) ;
}
@ConfigurationProperties ( prefix = "spring.datasource.dedicated .hikari" )
@ConfigurationProperties ( prefix = "spring.datasource.events .hikari" )
@Bean
public DataSource dedicated DataSource( @Qualifier ( "dedicated DataSourceProperties" ) DataSourceProperties dedicated DataSourceProperties) {
return dedicated DataSourceProperties. initializeDataSourceBuilder ( ) . type ( HikariDataSource . class ) . build ( ) ;
public DataSource events DataSource( @Qualifier ( "events DataSourceProperties" ) DataSourceProperties events DataSourceProperties) {
return events DataSourceProperties. initializeDataSourceBuilder ( ) . type ( HikariDataSource . class ) . build ( ) ;
}
@Bean
public LocalContainerEntityManagerFactoryBean dedicated EntityManagerFactory( @Qualifier ( "dedicatedDataSource" ) DataSource dedicated DataSource ,
public LocalContainerEntityManagerFactoryBean events EntityManagerFactory( @Qualifier ( "eventsDataSource" ) DataSource events DataSource ,
EntityManagerFactoryBuilder builder ) {
return builder
. dataSource ( dedicated DataSource)
. dataSource ( events DataSource)
. packages ( LifecycleEventEntity . class , StatisticsEventEntity . class , ErrorEventEntity . class , RuleNodeDebugEventEntity . class , RuleChainDebugEventEntity . class , AuditLogEntity . class )
. persistenceUnit ( DEDICATED _PERSISTENCE_UNIT)
. persistenceUnit ( EVENTS _PERSISTENCE_UNIT)
. build ( ) ;
}
@Bean ( DEDICATED _TRANSACTION_MANAGER)
public JpaTransactionManager dedicated TransactionManager( @Qualifier ( "dedicated EntityManagerFactory" ) LocalContainerEntityManagerFactoryBean dedicated EntityManagerFactory) {
return new JpaTransactionManager ( Objects . requireNonNull ( dedicated EntityManagerFactory. getObject ( ) ) ) ;
@Bean ( EVENTS _TRANSACTION_MANAGER)
public JpaTransactionManager events TransactionManager( @Qualifier ( "events EntityManagerFactory" ) LocalContainerEntityManagerFactoryBean events EntityManagerFactory) {
return new JpaTransactionManager ( Objects . requireNonNull ( events EntityManagerFactory. getObject ( ) ) ) ;
}
@Bean ( DEDICATED _TRANSACTION_TEMPLATE)
public TransactionTemplate dedicated TransactionTemplate( @Qualifier ( DEDICATED _TRANSACTION_MANAGER) JpaTransactionManager dedicated TransactionManager) {
return new TransactionTemplate ( dedicated TransactionManager) ;
@Bean ( EVENTS _TRANSACTION_TEMPLATE)
public TransactionTemplate events TransactionTemplate( @Qualifier ( EVENTS _TRANSACTION_MANAGER) JpaTransactionManager events TransactionManager) {
return new TransactionTemplate ( events TransactionManager) ;
}
@Bean ( DEDICATED _JDBC_TEMPLATE)
public JdbcTemplate dedicated JdbcTemplate( @Qualifier ( "dedicatedDataSource" ) DataSource dedicated DataSource ) {
return new JdbcTemplate ( dedicated DataSource) ;
@Bean ( EVENTS _JDBC_TEMPLATE)
public JdbcTemplate events JdbcTemplate( @Qualifier ( "eventsDataSource" ) DataSource events DataSource ) {
return new JdbcTemplate ( events DataSource) ;
}
}