我是Spring Boot的新手。我的要求是同时使用 mysql 和 mongo 数据库。对于一些与事务相关的操作,我将使用 mysql,出于获取目的,我将存储/检索数据到 mongo。我经历了很多考试,现在我完全困惑了。我想要一些像 JPArepository 这样的结构,在那里我可以使用内置方法 .e.g
public interface CustomerRepository extends MongoRepository<Customer, String> {}
和
public interface UserRepository extends CrudRepository<User, Long> { }
只需提及连接,这将指向正确的数据库。 我在两个数据库中都有很多表。示例示例也将有助于如何使用不同的连接编写查询。
这是一个示例@EnableJpaRepositories
-
使用 basePackages 指定要扫描的包以查找带注释的组件。
-
使用 em.setPackagesToScan 设置是否对类路径中的实体类使用基于 Spring 的扫描。
让我们按照代码创建 mysql 和 mongo 配置类。
对于 MySQL
@Configuration
@EnableJpaRepositories(basePackages = {"yourpackage.mysql.repositories"},
entityManagerFactoryRef = "mysqlEntityManagerFactory",
transactionManagerRef = "mysqlTransactionManager")
@EnableTransactionManagement
public class mysqlConfig {
@Bean(name = "mysqlEntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSourceWrite());
em.setPackagesToScan(new String[]{"yourpackage.mysql.entities"});
em.setPersistenceUnitName("trueid");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean(name = "dataSourceMysql",destroyMethod = "close")
public DataSource dataSource() {
...
return dataSource;
}
@Bean(name = "mysqlTransactionManager")
public PlatformTransactionManager transactionManager(@Qualifier(value = "entityManagerFactory") EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
@Bean(name = "mysqlExceptionTranslation")
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.dialect", ...);
properties.setProperty("hibernate.show_sql", "false");
return properties;
}
}
对于蒙戈
@Configuration
@EnableJpaRepositories(basePackages = {"yourpackage.mongo.repositories"},
entityManagerFactoryRef = "mongoEntityManagerFactory",
transactionManagerRef = "mongoTransactionManager")
@EnableTransactionManagement
public class mongoConfig {
@Bean(name = "mongoEntityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSourceWrite());
em.setPackagesToScan(new String[]{"yourpackage.mongo.entities"});
em.setPersistenceUnitName("trueid");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean(name = "dataSourceMongo",destroyMethod = "close")
public DataSource dataSource() {
...
return dataSource;
}
@Bean(name = "mongoTransactionManager")
public PlatformTransactionManager transactionManager(@Qualifier(value = "mongoEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
@Bean(name = "mongoExceptionTranslation")
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.dialect", ...);
properties.setProperty("hibernate.show_sql", "false");
return properties;
}
}
实体和存储库类
- 您可以管理不同的包裹作为您的详细信息客户,付款详细信息,所有私有数据类应放入"yourpackage.mysql.entities"和其他数据类,如coomon详细信息/可搜索数据将放入"yourpackage.mongo.entities"
我希望这有帮助