Аннотация @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 будет использоваться для определения правильного класса сущности и среды базы данных. Надеюсь, это сработает.