Как включить аудит JPA с помощью SpringBootTest?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как включить аудит JPA с помощью SpringBootTest?

Сообщение Anonymous »

Я хочу написать интеграционные тесты для своих конечных точек RestAPI, и у меня возникают проблемы с @EnableJpaAuditing. Я хочу, чтобы некоторые из моих объектов проверялись Spring, поэтому я создал следующий класс конфигурации:

Код: Выделить всё

@Configuration
@EnableJpaAuditing
public class PersistenceAuditConfiguration {

}
Что я импортирую в основную конфигурацию приложения:

Код: Выделить всё

@ServletComponentScan
@SpringBootApplication
@Import(PersistenceAuditConfiguration.class)
public class TMTWebApplication {

public static void main(String[] args)  {
SpringApplication.run(TMTWebApplication.class, args);
}
}
Кроме того, у меня есть абстрактный базовый класс для всех объектов, которые я хочу проверять:

Код: Выделить всё

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true)
public abstract class AuditableEntity extends EpicPojo implements Serializable {

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", nullable = false, updatable = false)
@CreatedDate
private Date createdAt;

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updated_at", nullable = false)
@LastModifiedDate
private Date updatedAt;

//...and so on

}
В моем application.yml я установил следующие свойства:

Код: Выделить всё

spring:
datasource:
url: jdbc:postgresql://localhost:5432/tmt
username: whoever
password: whatever
driver-class-name: org.postgresql.Driver
flyway:
baselineOnMigrate: true
locations: classpath:db/migration
jpa:
hibernate:
ddl-auto: update
generate-ddl: true
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQL10Dialect
jdbc:
lob:
non_contextual_creation: true
Таким образом, я могу опустить поля (столбцы) аудита в своих сценариях миграции Flyway. Когда я обычно запускаю приложение в пустой базе данных, столбцы аудита created_at и updated_at создаются для каждого объекта, который наследуется от AuditableEntity.

Теперь я хочу запустить интеграционный тест, используя аннотацию @SpringBootTest, поэтому я ожидаю, что весь контекст приложения будет запускаться примерно одинаково. К сожалению, это не так. Я использую встроенный Postgres от Zonky для тестов, поскольку у меня есть некоторые типы данных JSONB. Настройка прошла без проблем, но, к сожалению, поля аудита не созданы. Мой тестовый класс выглядит так:

Код: Выделить всё

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureEmbeddedDatabase
@FlywayTest
@Import(PersistenceAuditConfiguration.class)
public class AuthController_IntegrationTest {

//... testy-testy, test, test

}
Первый тест вставит (зарегистрирует) нового пользователя в мою таблицу проверенных пользователей и вернет его, но он завершается неудачно из-за следующего исключения:

Код: Выделить всё

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a];
nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

[stack trace omitted]

Caused by: org.postgresql.util.PSQLException: ERROR: column roleentity0_.created_at does not exist
Я обнаружил много подобных проблем, но большинство из них касались @DataJpaTest, а не @SpringBootTest (на данный момент я не хочу тестировать разные уровни отдельно) . Согласно различным темам и проблемам, которые я смог найти, я также пробовал следующее:
  • @EnableJpaAuditing непосредственно в классе конфигурации TMTWebApplication. , что было первым и оригинальным способом до написания интеграционных тестов.
  • @EnableJPAAudidting непосредственно в моем тестовом классе, что привело к исключению BeanDefinitionOverrideException. После того, как я неохотно разрешил переопределение bean-компонента, я снова столкнулся с указанным выше исключением (created_at не существует).
Я могу вижу, что есть проблемы в этой и этой теме на Github, но я еще не понимаю базовую конструкцию Spring для этой конкретной конфигурации, и документация тоже не особо помогла. Обратите внимание: Вчера я задавал аналогичный вопрос по этой проблеме, но удалил его. Я подозревал, что это как-то связано с тем, что встроенный экземпляр Postgres от Zonky не понимает свойств приложения, но я думаю, что это было неправильно, поэтому мне пришлось перефразировать его, чтобы сосредоточиться только на Spring. Наверное, среди всех деревьев здесь мне не хватает леса, поэтому, если бы кто-нибудь указал мне на нужное дерево, я был бы очень признателен. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/622 ... ngboottest
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Spring аудит данных JPA — как его спроектировать?
    Anonymous » » в форуме JAVA
    0 Ответы
    65 Просмотры
    Последнее сообщение Anonymous
  • Как включить и настроить аудит в приложении Spring Boot
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как включить и настроить аудит в приложении Spring Boot
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как включить и настроить аудит в приложении Spring Boot
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как включить и настроить аудит в приложении Spring Boot
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»