MySQL 和 MONGO Spring Boot 中的多个数据源



我是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"

我希望这有帮助

最新更新