如何解决Spring Boot Multiple Database从辅助数据库提供空值
我已经配置了2个数据库,从而使1个数据库成为主要数据库。我能够从主数据库中获取数据库,但辅助数据库却给了我空结果。将在主模式中创建辅助数据库表的相应配置,但结果为空。下面是我编写的代码。
数据库配置。
@Bean
@ConfigurationProperties(prefix="com.example.studentmanagement.datasource")
public DataSource studentDataSource() {
DataSource dataSource=DataSourceBuilder.create().build();
return dataSource;
}
@Bean
@Primary
@ConfigurationProperties(prefix="com.example.ordermanagement.datasource")
public DataSource orderDataSource() {
DataSource dataSource=DataSourceBuilder.create().build();
return dataSource;
}
我正在使用带有弹簧数据存储库的entitymanager工厂来获取数据。以下是主要和辅助配置。
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages ="com.example.SpringBootMultipleDbs.Customer.Repos",entityManagerFactoryRef = "orderEntityManagerFactoryBean",transactionManagerRef = "orderTransactionManager")
public class PrimaryConfig {
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean orderEntityManagerFactoryBean(DataSource orderDataSource) {
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean=new LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setDataSource(orderDataSource);
localContainerEntityManagerFactoryBean.setPackagesToScan("com.example.SpringBootMultipleDbs.Customer.Entities");
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
Map<String,Object> jpaPropertiesMap=new HashMap<>();
jpaPropertiesMap.put("hibernate.dialect",org.hibernate.dialect.MySQL5Dialect.class);
jpaPropertiesMap.put("hibernate.hbm2ddl.auto","update");
jpaPropertiesMap.put("hibernate.format_sql",true);
jpaPropertiesMap.put("hibernate.show_sql",true);
jpaPropertiesMap.put("hibernate.implicit_naming_strategy",org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl.class);
jpaPropertiesMap.put("hibernate.physical_naming_strategy",org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl.class);
localContainerEntityManagerFactoryBean.setJpaPropertyMap(jpaPropertiesMap);
return localContainerEntityManagerFactoryBean;
}
@Bean
@Primary
public JpaTransactionManager orderTransactionManager(LocalContainerEntityManagerFactoryBean orderEntityManagerFactoryBean) {
JpaTransactionManager jpaTransactionManager=new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(orderEntityManagerFactoryBean.getObject());
return jpaTransactionManager;
}
}
二级配置
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages ="com.example.SpringBootMultipleDbs.Department.Repos",entityManagerFactoryRef = "studentEntityManagerFactoryBean",transactionManagerRef = "studentTransactionManager")
public class SecondaryConfig {
@Bean
public LocalContainerEntityManagerFactoryBean studentEntityManagerFactoryBean(DataSource studentDataSource) {
LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean=new LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setDataSource(studentDataSource);
localContainerEntityManagerFactoryBean.setPackagesToScan("com.example.SpringBootMultipleDbs.Department.Entities");
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
Map<String,org.hibernate.dialect.MySQL5Dialect.class);
jpaPropertiesMap.put("hibernate.format_sql",org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl.class);
localContainerEntityManagerFactoryBean.setJpaPropertyMap(jpaPropertiesMap);
return localContainerEntityManagerFactoryBean;
}
@Bean
public JpaTransactionManager studentTransactionManager(LocalContainerEntityManagerFactoryBean studentEntityManagerFactoryBean) {
JpaTransactionManager jpaTransactionManager=new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(studentEntityManagerFactoryBean.getObject());
return jpaTransactionManager;
}
}
下面是spring数据jpa存储库类,向我获取空数据映射到辅助数据库配置。
public interface DepartmentRepo extends JpaRepository<Department,Integer> {
public Department findByDeptId(Integer id);
}
application.yml文件
com:
example:
studentmanagement:
datasource:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/student
username: root
password: root123
ordermanagement:
datasource:
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/order
username: root
password: root123
server:
port: 8085
servlet:
context-path: /SpringBootDbs
解决方法
您必须将配置代码和配置使用者代码保存在不同的程序包中。 在您的情况下,您有2个DB,一个用于学生管理,另一个用于订单管理,因此您还需要在代码中打包层次结构。您的包裹结构应如下所示。
com.example.orderManagement // OrderManagement Config和所有订单的消费者代码应在此处
com.example.Studentmanagement //学生管理配置和所有学生的消费者代码都在这里
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。