我不确定这是否是最佳解决方案。但是,它对我有用。如果您有两个使用
Jpa模块的关系数据库,那么我建议您创建
entity和
transaction管理Bean来读取每个数据源配置。
当你希望有一个组合
SQL和
NoSQL,我会创造
entity和
transcation对经理豆类
MySQL数据库,因为它与运作良好
Jpa。并保持原样配置
Mongo(直接从读取配置
application.properties)。
MySQLConfiguration
数据源配置类:
@Configuration@PropertySource("classpath:persistence-multiple-db.properties")@EnableJpaRepositories(basePackages = "com.springdata.dao.mysql", entityManagerFactoryRef = "mysqlEntityManager", transactionManagerRef = "mysqlTransactionManager")public class MySQLConfiguration { @Autowired private Environment env; @Bean @Primary public LocalContainerEntityManagerFactoryBean mysqlEntityManager() { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(myMySQLDataSource()); em.setPackagesToScan(new String[] { "com.springdata.models" }); HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); em.setJpaVendorAdapter(vendorAdapter); HashMap<String, Object> properties = new HashMap<String, Object>(); properties.put("hibernate.dialect", env.getProperty("hibernate.dialect")); em.setJpaPropertyMap(properties); return em; } @Bean @Primary public DataSource myMySQLDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(env.getProperty("spring.mysql.jdbc.driverClassName")); dataSource.setUrl(env.getProperty("spring.mysql.jdbc.url")); dataSource.setUsername(env.getProperty("spring.mysql.user")); dataSource.setPassword(env.getProperty("spring.mysql.pass")); return dataSource; } @Bean @Primary public PlatformTransactionManager mysqlTransactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(mysqlEntityManager().getObject()); return transactionManager; }上面的数据源配置参数是从
classpath:persistence-multiple-db.properties类路径中的文件中读取的。
# mysql jdbc connectionsspring.mysql.jdbc.driverClassName=com.mysql.jdbc.Driverspring.mysql.jdbc.url=jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=falsespring.mysql.user=rootspring.mysql.pass=password1# hibernate.Xhibernate.dialect=org.hibernate.dialect.MySQL5Dialect
以上配置足以处理
MySQL数据源。要在项目中进行mongo配置,请将以下行添加到中
application.properties。
# mongo configurationspring.data.mongodb.uri=mongodb://localhostspring.data.mongodb.database=test
Springboot将自动创建必要的mongo数据源bean,并使它们随时可供Spring容器使用。
现在,为MySQL和Mongo数据源创建存储库接口。
MyMongoRepository
接口:
@Transactionalpublic interface MyMongoRepository extends MongoRepository<Users, String>{}MySQLRepository
接口:
@Transactionalpublic interface MySQLRepository extends JpaRepository<Users, String>{}Users
pojo课程:
@Entity@Table(name = "users")@document(collection="users")@Datapublic class Users { @Id @javax.persistence.Id private String id; private String name; private Integer age;}添加了以下注释以启用mongorepositoreis并将组件扫描到springboot主类。
@SpringBootApplication@ComponentScan(basePackages = { "com.springdata" })@EnableMongoRepositories(basePackages={"com.springdata.dao.mongo"})public class SpringbootmysqlmongoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootmysqlmongoApplication.class, args); }}最后,要测试一些代码。
MyRepositoryImpl
类:
@Servicepublic class MyRepositoryImpl { @Autowired private MyMongoRepository myMongoRepository; @Autowired private MySQLRepository mySQLRepository; @PostConstruct public void extractUsers(){ myMongoRepository.findAll().forEach((user) -> System.out.println("user name from mongo is : "+user.getName())); mySQLRepository.findAll().forEach((user) -> System.out.println("User name from mysql is : "+user.getName())); }}users在
mysql test数据库中创建了表并在数据库中进行了
users收集
mongo test。
最后,已将我的代码上传到git存储库。
https://github.com/harshavmb/springbootmysqlmongo



