How to disable javers for the second database in Spring Boot?

96 Views Asked by At

I'm using Javers via Spring Boot. Is there a way to disable Javers for the second database?

Here is the java configuraions for implementing multiple datasources (Oracle & PostgreSQL). Javers must be disabled for Oracle

DB2Config

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "db2EntityManagerFactory",
    transactionManagerRef = "db2TransactionManager",
    basePackages = {"com.example.db2.repository"})
public class Db2Config {

  @Autowired
  private Environment env;


  @Bean
  @ConfigurationProperties(prefix = "spring.datasource.db2.javers")
  public JaversSpringProperties db2JaversSpringProperties() {
    return new JaversSqlProperties();
  }

  @Bean(name = "db2DataSource")
  @Primary
  @ConfigurationProperties(prefix = "spring.datasource.db2")
  public DataSource db2DataSource() {
    return DataSourceBuilder.create().build();
  }

  @Primary
  @Bean(name = "db2EntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean db2EntityManagerFactory(
      EntityManagerFactoryBuilder builder,
      @Qualifier("db2DataSource") DataSource db2DataSource) {
    HashMap<String, Object> properties = new HashMap<>();
    properties.put("hibernate.hbm2ddl.auto",
            env.getProperty("spring.datasource.db2.jpa.hibernate.ddl-auto"));
    properties.put("hibernate.dialect",
            env.getProperty("spring.datasource.db2.jpa.database-platform"));
    return builder
        .dataSource(db2DataSource)
        .properties(properties)
        .packages("com.example.db2.model")
        .build();
  }

  @Bean(name = "db2TransactionManager")
  public PlatformTransactionManager db2TransactionManager(
      @Qualifier("db2EntityManagerFactory") EntityManagerFactory db2EntityManagerFactory) {
    return new JpaTransactionManager(db2EntityManagerFactory);
  }
}

DB1Config

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "db1EntityManagerFactory",
    transactionManagerRef = "db1TransactionManager",
    basePackages = {"com.example.db1.common.persistence.repository"},
    repositoryFactoryBeanClass = EntityGraphJpaRepositoryFactoryBean.class)
public class DB1Config {

  @Autowired
  private Environment env;


  @Primary
  @Bean
  @ConfigurationProperties(prefix = "spring.datasource.db1.javers")
  public JaversSpringProperties db1JaversSpringProperties() {
    return new JaversSqlProperties();
  }

  private static SpringLiquibase springLiquibase(
      DataSource dataSource, LiquibaseProperties properties) {
    SpringLiquibase liquibase = new SpringLiquibase();
    liquibase.setDataSource(dataSource);
    liquibase.setChangeLog(properties.getChangeLog());
    liquibase.setContexts(properties.getContexts());
    liquibase.setDefaultSchema(properties.getDefaultSchema());
    liquibase.setDropFirst(properties.isDropFirst());
    liquibase.setShouldRun(properties.isEnabled());
    liquibase.setLabels(properties.getLabels());
    liquibase.setChangeLogParameters(properties.getParameters());
    liquibase.setRollbackFile(properties.getRollbackFile());
    return liquibase;
  }

  @Bean(name = "db1DataSource")
  @ConfigurationProperties(prefix = "spring.datasource.db1")
  public DataSource db1DataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "db1EntityManagerFactory")
  public LocalContainerEntityManagerFactoryBean db1EntityManagerFactory(
      EntityManagerFactoryBuilder builder, @Qualifier("db1DataSource") DataSource db1DataSource) {
    HashMap<String, Object> properties = new HashMap<>();
    properties.put(
        "hibernate.hbm2ddl.auto", env.getProperty("spring.datasource.db1.jpa.hibernate.ddl-auto"));
    properties.put(
        "hibernate.dialect", env.getProperty("spring.datasource.db1.jpa.database-platform"));
    properties.put("hibernate.physical_naming_strategy", env.getProperty("spring.datasource.db1.jpa.hibernate.naming.physical-strategy"));
    properties.put("hibernate.globally_quoted_identifiers", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.globally_quoted_identifiers"));
    properties.put("hibernate.globally_quoted_identifiers_skip_column_definitions", env.getProperty("spring.datasource.db1.jpa.properties.hibernate.globally_quoted_identifiers_skip_column_definitions"));
    return builder
        .dataSource(db1DataSource)
        .properties(properties)
        .packages("com.example.db1.persistence")
        .build();
  }

  @Bean(name = "db1TransactionManager")
  public PlatformTransactionManager db1TransactionManager(
      @Qualifier("db1EntityManagerFactory") EntityManagerFactory db1EntityManagerFactory) {
    return new JpaTransactionManager(db1EntityManagerFactory);
  }

  @Bean
  @ConfigurationProperties(prefix = "spring.datasource.db1.liquibase")
  public LiquibaseProperties db1LiquibaseProperties() {
    return new LiquibaseProperties();
  }

  @Bean
  public SpringLiquibase db1Liquibase() {
    return springLiquibase(db1DataSource(), db1LiquibaseProperties());
  }
}

The second question how I can disable it for all datasources with java config?

0

There are 0 best solutions below