Код: Выделить всё
@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
}
Код: Выделить всё
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
Теперь я хочу запустить интеграционный тест, используя аннотацию @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
- @EnableJpaAuditing непосредственно в классе конфигурации TMTWebApplication. , что было первым и оригинальным способом до написания интеграционных тестов.
- @EnableJPAAudidting непосредственно в моем тестовом классе, что привело к исключению BeanDefinitionOverrideException. После того, как я неохотно разрешил переопределение bean-компонента, я снова столкнулся с указанным выше исключением (created_at не существует).
Подробнее здесь: https://stackoverflow.com/questions/622 ... ngboottest