Springboot 配置多数据源的文章网上一大把,但是大多都有一些问题。本次遇到的问题为查询驼峰转换失效。
经过实验,把正确的配置贴出来
// application.yml
spring:
// ...
jpa:
database: POSTGRESQL
show-sql: true
open-in-view: true
properties:
hibernate:
physical_naming_strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
enable_lazy_load_no_trans: true #使用延时加载时控制Session的生命周期
dialect: org.hibernate.dialect.PostgreSQLDialect
ddl-auto: update
//....
@Configuration
@PropertySource({"classpath:application.yml"})
@EnableJpaRepositories(
basePackages = "repository",
entityManagerFactoryRef = "situationEntityManager",
transactionManagerRef = "situationTransactionManager")
public class PersistenceSituationAutoConfiguration {
private final JpaProperties jpaProperties;
private final HibernateProperties hibernateProperties;
private Map<String, Object> getVendorProperties() {
return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
}
public PersistenceSituationAutoConfiguration(JpaProperties jpaProperties, HibernateProperties hibernateProperties) {
this.jpaProperties = jpaProperties;
this.hibernateProperties = hibernateProperties;
}
@Bean
@Primary
public DataSource situationDataSource(DataSourceProperties dataSourceProperties) {
return dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean
public LocalContainerEntityManagerFactoryBean situationEntityManager(EntityManagerFactoryBuilder builder, DataSource situationDataSource) {
return builder.dataSource(situationDataSource)
.packages("model") // 实体类的包
.persistenceUnit("one") // 多数据源随便给个名
.properties(getVendorProperties())
.build();
}
@Bean
public PlatformTransactionManager situationTransactionManager(LocalContainerEntityManagerFactoryBean situationEntityManager) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(situationEntityManager.getObject());
return transactionManager;
}
}
参考的文章: