Я использую Springboot версии 2.1.2 и MSSQL Server в качестве источника данных.Когда я использовал только один источник данных, у меня не было проблем с envers.Аудит работает отлично.Но когда проекту требуется два источника данных, envers не сотрудничает.Мне нужен аудит только для первого источника данных.
Вот конфиг:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = { "com.sample.app.repository", "com.sample.app.security.repository" },
repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class
)
public class MainDbConfig {
@Bean
@Primary
@ConfigurationProperties("spring.datasource")
public DataSourceProperties appDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("spring.datasource.hikari")
public HikariDataSource appDataSource() {
return mainDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("appDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.sample.app.model", "com.sample.app.security.model", "com.sample.app.audit")
.persistenceUnit("app")
.build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
и
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "otherEntityManagerFactory",
transactionManagerRef = "otherTransactionManager",
basePackages = {"com.sample.other.repository"}
)
public class OtherDbConfig {
@Bean
@ConfigurationProperties(prefix = "other.datasource")
public DataSourceProperties otherDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("other.datasource.hikari")
public HikariDataSource otherDataSource() {
return otherDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean(name = "otherEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("otherDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.sample.other.model")
.persistenceUnit("other")
.build();
}
@Primary
@Bean(name = "otherTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("otherEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
Все хорошо при доступе к 2 источникам данных, до аудитаприходит пользовательский прослушиватель:
public class AuditRevisionListener implements RevisionListener {
@Value("${jwt.header:Authorization}")
private String tokenHeader;
@Autowired
private TokenUtil jwtTokenUtil;
@Override
public void newRevision(Object revisionEntity) {
AuditRevisionEntity auditRevisionEntity = (AuditRevisionEntity) revisionEntity;
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String username = jwtTokenUtil.getUsernameFromToken(request.getHeader("X-Auth-Token"));
auditRevisionEntity.setUsername(username);
}
}
tokenHeader не заполняется, TokenUtil не инициализируется.Когда я использовал один источник данных, все работает хорошо.
Любая помощь будет оценена.