springboot2.x版本 多数据源整合问题 At least one JPA metamodel must be present!
配置多个数据源报错详情:
at cn.htd.qidian.server.bi.web.BiApplication.main(BiApplication.java:39)
Caused by: java.lang.IllegalArgumentException: At least one JPA metamodel must be present!
at org.springframework.util.Assert.notEmpty(Assert.java:450)
at org.springframework.data.jpa.mapping.JpaMetamodelMappingContext.<init>(JpaMetamodelMappingContext.java:55)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:80)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:44)
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:141)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1753)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1690)
... 16 common frames omitted
方案一:没有指定主数据源导致
参考:https://my.oschina.net/u/3535099/blog/3051119
package cn.htd.qidian.server.bi.common.datasource; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; /** * BI数据源配置 */ @Configuration @MapperScan(basePackages = "cn.htd.qidian.server.bi.dao.datasource.bi", sqlSessionTemplateRef = "biCenterSqlSessionTemplate") public class BiDataSourceConfig { @Bean(name = "biCenterDataSource") @ConfigurationProperties(prefix = "spring.datasource.bi") @Primary //自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 public DataSource biCenterDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "biCenterSqlSessionFactory") @Primary//自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 public SqlSessionFactory biCenterSqlSessionFactory(@Qualifier("biCenterDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/bi/*.xml")); bean.setConfigLocation(new DefaultResourceLoader().getResource("classpath:mybatis/sqlMapConfig.xml")); return bean.getObject(); } @Bean(name = "biCenterTransactionManager") @Primary//自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 public DataSourceTransactionManager biCenterTransactionManager(@Qualifier("biCenterDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "biCenterSqlSessionTemplate") @Primary//自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 public SqlSessionTemplate biCenterSqlSessionTemplate(@Qualifier("biCenterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
方案二:springboot启动类 加上 @EnableAutoConfiguration(exclude={JpaRepositoriesAutoConfiguration.class})