我试图设置一个带有两个数据源的spring boot项目。
一个用于装载,一个用于存储。
申请道具
# Primary DataSource
datasource.primary.url=url
datasource.primary.username=root
datasource.primary.password=password
datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
# Secondary DataSource
datasource.secondary.url=url
datasource.secondary.username=root
datasource.secondary.password=password
datasource.secondary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
主数据库的配置类
package com.anders.cphbusiness.db;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.anders.cphbusiness.entitiesModel", entityManagerFactoryRef = "entityManager")
public class LoadDataSourceConfig {
@Bean(name = "dataSource")
@Primary
@ConfigurationProperties(prefix = "datasource.primary")
public DataSource loadingDataSource() {
return DataSourceBuilder.create().build();
}
@PersistenceContext(unitName = "primary")
@Primary
@Bean(name = "entityManager")
public LocalContainerEntityManagerFactoryBean loadingEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(loadingDataSource()).persistenceUnit("primary").packages("com.anders.cphbusiness.entitiesModel").build();
}
}
辅助数据库的配置类
package com.anders.cphbusiness.db;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.anders.cphbusiness.storingModel", entityManagerFactoryRef = "secondaryEntityManager", transactionManagerRef = "secondaryTransactionManager")
public class StoreDataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "datasource.secondary")
public DataSource storingDataSource() {
return DataSourceBuilder.create().build();
}
@PersistenceContext(unitName = "secondary")
@Bean(name = "secondaryEntityManager")
public LocalContainerEntityManagerFactoryBean storingEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(storingDataSource())
.packages("com.anders.cphbusiness.storingModel")
.persistenceUnit("secondary")
.build();
}
@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(storingEntityManagerFactory(builder).getObject());
tm.setDataSource(storingDataSource());
return tm;
}
}
我在控制器中的回购抱怨它。
@Autowired
private wagerBoardMarksRepo repo;
实际回购
package com.anders.cphbusiness.repositories;
import com.anders.cphbusiness.entitiesModel.WagerBoard;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface WagerBoardRepo extends JpaRepository<WagerBoard, String> {
}
错误:
2017-02-02 15:19:53.035 INFO 6804 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2017-02-02 15:19:53.035 INFO 6804 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.11
2017-02-02 15:19:53.172 INFO 6804 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-02-02 15:19:53.172 INFO 6804 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3048 ms
2017-02-02 15:19:53.452 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-02-02 15:19:53.462 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*]
2017-02-02 15:19:53.462 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-02-02 15:19:53.462 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-02-02 15:19:53.462 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-02-02 15:19:53.462 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-02-02 15:19:53.462 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestLoggingFilter' to: [/*]
2017-02-02 15:19:53.462 INFO 6804 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*]
2017-02-02 15:19:56.837 INFO 6804 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'primary'
2017-02-02 15:19:56.857 INFO 6804 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: primary
...]
2017-02-02 15:19:57.008 INFO 6804 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.0.11.Final}
2017-02-02 15:19:57.009 INFO 6804 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2017-02-02 15:19:57.011 INFO 6804 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2017-02-02 15:19:57.071 INFO 6804 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2017-02-02 15:19:57.185 INFO 6804 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect
2017-02-02 15:19:57.666 WARN 6804 --- [ main] org.hibernate.mapping.RootClass : HHH000038: Composite-id class does not override equals(): com.anders.cphbusiness.entitiesModel.PK_poolgameTransaction
2017-02-02 15:19:57.667 WARN 6804 --- [ main] org.hibernate.mapping.RootClass : HHH000039: Composite-id class does not override hashCode(): com.anders.cphbusiness.entitiesModel.PK_poolgameTransaction
2017-02-02 15:19:57.667 WARN 6804 --- [ main] org.hibernate.mapping.RootClass : HHH000038: Composite-id class does not override equals(): com.anders.cphbusiness.entitiesModel.PK_WagerBoardMarks
2017-02-02 15:19:57.667 WARN 6804 --- [ main] org.hibernate.mapping.RootClass : HHH000039: Composite-id class does not override hashCode(): com.anders.cphbusiness.entitiesModel.PK_WagerBoardMarks
2017-02-02 15:19:57.668 WARN 6804 --- [ main] org.hibernate.mapping.RootClass : HHH000038: Composite-id class does not override equals(): com.anders.cphbusiness.entitiesModel.PK_wagerBoard
2017-02-02 15:19:57.668 WARN 6804 --- [ main] org.hibernate.mapping.RootClass : HHH000039: Composite-id class does not override hashCode(): com.anders.cphbusiness.entitiesModel.PK_wagerBoard
2017-02-02 15:19:58.050 INFO 6804 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'primary'
2017-02-02 15:19:58.090 INFO 6804 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'secondary'
2017-02-02 15:19:58.090 INFO 6804 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: secondary
...]
2017-02-02 15:20:00.790 INFO 6804 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.SQLServerDialect
2017-02-02 15:20:00.962 INFO 6804 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'secondary'
2017-02-02 15:20:00.982 WARN 6804 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'restController': Unsatisfied dependency expressed through field 'repo'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.anders.cphbusiness.repositories.wagerBoardMarksRepo' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=wagerRepo)}
2017-02-02 15:20:00.982 INFO 6804 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'secondary'
2017-02-02 15:20:00.982 INFO 6804 --- [ main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'primary'
2017-02-02 15:20:01.002 INFO 6804 --- [ main] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-02-02 15:20:01.152 ERROR 6804 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field repo in com.anders.cphbusiness.controller.restController required a bean of type 'com.anders.cphbusiness.repositories.wagerBoardMarksRepo' that could not be found.
Action:
Consider defining a bean of type 'com.anders.cphbusiness.repositories.wagerBoardMarksRepo' in your configuration.
中的示例进行操作
任何建议 - 提示 - 使用多个数据源设置弹簧引导的指南(最好使用带有两个数据源的项目的工作git)