Java 具有两个数据源的Spring引导
我正试图用两个数据源建立一个SpringBoot项目 一个用于装载,一个用于存储 应用程序道具。Java 具有两个数据源的Spring引导,java,entity-framework,spring-boot,entitymanager,multiple-databases,Java,Entity Framework,Spring Boot,Entitymanager,Multiple Databases,我正试图用两个数据源建立一个SpringBoot项目 一个用于装载,一个用于存储 应用程序道具。 # Primary DataSource datasource.primary.url=url datasource.primary.username=root datasource.primary.password=password datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
# 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;
}
}
辅助数据库的配置类
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> {
}
尝试在
关于使用多个数据源设置spring boot的任何建议-提示-指南(最好是项目中使用两个数据源的git)您能提供错误的完整堆栈跟踪吗?@JonSampson changed abit,尝试遵循另一个指南-立即获取新错误-立即完成stacktrace。看来您已经通过了数据源问题。WagerborardMarksRepo是否注释为@Repository?@JonSampson是的,我将整个repo类添加到了光盘中。您可能不需要在接口上使用@Repository(因为我在中没有看到)。您似乎缺少的是一个
@EnableJpaRepositories
注释,其中包含WagerborardMarksRepo
中的包。