Аннотация @Table и каталог нужных наборов или схем для разработки или развертывания

Вот моя проблема.

Когда я занимаюсь разработкой, у меня обычно есть постоянный класс, настроенный на H2 с @Profile("разработка"), сопоставленный с локальной базой данных на моем компьютере. В то же время у меня есть другой класс постоянства, отображающий те же сущности, который в основном является копией первого, настроенного только для MySQL. Эти классы постоянства выбираются Spring в зависимости от аннотации @Profile, второй класс аннотируется @Profile("по умолчанию")

Моя проблема в том, что при развертывании @Profile("по умолчанию") выбирается, а MySQL нужна аннотация @Table, чтобы она была такой:

@Table(name = "tableName", catalog = "databaseName")

Находясь в разработке, H2 понимает только это:

@Table(name = "tableName", schema = "databaseName")

Есть ли способ решить эту проблему? Какой-то условный способ переключения аннотации @Table со схемы на каталог при развертывании?

1 ответ

Чтобы добиться желаемого поведения в Spring, можно использовать условную конфигурацию bean-компонента и условные аннотации.

       @Configuration
    public class EntityConfiguration {
    
        @Profile("development")
        static class H2Configuration {
            @Bean
            public JpaRepository<H2Entity, Long> h2Repository() {
                return new JpaRepository<H2Entity, Long>();
            }
        }
    
        @Profile("default")
        static class MySQLConfiguration {
            @Bean
            public JpaRepository<MySQLEntity, Long> mysqlRepository() {
                return new JpaRepository<MySQLEntity, Long>();
            }
        }
    }

В этой конфигурации активный профиль Spring будет использоваться для определения правильного класса сущности и среды базы данных. Надеюсь, это сработает.

Другие вопросы по тегам