东莞营销商城网站建设wordpress 显示分类
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:20
当前位置: 首页 > news >正文
东莞营销商城网站建设,wordpress 显示分类,做宠物网站还有前景嘛,谁帮58同城做的网站1、起因 因为要在项目中同时访问redis#xff0c;mongo和mysql三种数据库#xff0c;而且因为偏向spring-data#xff0c;所以都使用了spring-data 在使用的过程中如果不做配置发现会有冲突#xff0c;这篇文章也是解决这个问题#xff0c;避免以后遇到同样的问题不知所…1、起因 因为要在项目中同时访问redismongo和mysql三种数据库而且因为偏向spring-data所以都使用了spring-data 在使用的过程中如果不做配置发现会有冲突这篇文章也是解决这个问题避免以后遇到同样的问题不知所措 2、项目实战 2.1 创建springboot项目 没啥好说的直接一路next使用maven管理项目 2.2 加入spring-data的配置 这里使用了mongo和mysql也是工作中常用的两个数据库pom中配置如下 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-mongodb/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency 2.3 配置数据源 application.yml中主要是数据库的链接信息mysql 和mongo的 server:port: 9099 spring:data:mongodb:uri: mongodb://172.26.1.152:27017/ccp_testdatasource:driver-class-name: com.mysql.cj.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSourceurl: jdbc:mysql://172.26.1.152:3306/cx_test?characterEncodingutf8serverTimezoneUTCusername: rootpassword: 123456hikari:minimum-idle: 10maximum-pool-size: 150connection-test-query: SELECT 1 FROM DUALconnection-timeout: 600idleTimeout: 30000maxLifetime: 40000validation-timeout: 300login-timeout: 10jpa:show-sql: true 2.4 配置entity 这里是使用mysql的entitymongo中直接复用同样的entity Data Entity Table(name test_table) Document(collection test_table) public class TestTable implements Serializable {private static final long serialVersionUID 1L; Id Column(name id, nullable false)GeneratedValue(strategy GenerationType.IDENTITY)private Integer id; Column(name name)private String name;}2.5 分别创建Repository mysql的Repository操作mysql 数据 package com.xin.mongoandmysql.dao.mysql;import com.xin.mongoandmysql.entity.TestTable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;public interface TestTableRepository extends JpaRepositoryTestTable, Integer, JpaSpecificationExecutorTestTable {} mongo的Repository操作mongo 数据 package com.xin.mongoandmysql.dao.mongo;import com.xin.mongoandmysql.entity.TestTable; import org.springframework.data.mongodb.repository.MongoRepository;public interface MongoTableRepository extends MongoRepositoryTestTable, String { } 注上面两个repo 放在不同的包下面不同数据库集成的repo不同 2.6 配置扫描的包 SpringBootApplication EnableMongoRepositories(basePackages {com.xin.mongoandmysql.dao.mongo}) EnableJpaRepositories(basePackages com.xin.mongoandmysql.dao.mysql) public class MongoAndMysqlApplication {public static void main(String[] args) {SpringApplication.run(MongoAndMysqlApplication.class, args); } }这里很重要配置mysql 和mongo的扫描路径也是这里的难点后面会讲原理和为什么 2.7 测试 创建一个简单的controller就行 RestController public class TestController {ResourceMongoTableRepository mongoTableRepository;ResourceTestTableRepository testTableRepository;GetMapping(/test)public void test(){TestTable testTable new TestTable();testTable.setName(香菜);testTable.setId(1);mongoTableRepository.save(testTable);testTableRepository.save(testTable);} } 直接调用接口就可以看到数据存入数据库OK实验结束。 2.8 看下结果 可以看到mysql和mongo 都存入了数据 3、打怪之旅 3.1 服务器启动不了bean注册失败 最初的时候因为没有分包扫描导致服务器启动失败之前没怎么注意过这件事 原因是因为jpa和mongo都会去根路径下扫描所有的repo然后生成动态代理 mysql 扫描到testRepo会生成代理 mongo扫描到testRepo也会生成代理 两者都会想容器进行注册这就导致bean出现重名的现象 源码 org.springframework.data.repository.config.RepositoryConfigurationDelegate#registerRepositoriesIn 这里可以看到RepositoryConfigurationDelegate来自spring-data-commons的包mysql和mongo都会调用 在源码中可以看到有个basePackages的属性如果不配置默认是从根路径进行扫描就会出现被代理多次注册的问题 3.2 spring-data 是如何实现repo中的接口的 在一个项目中有多个 spring-data 模块时尝试为特定实体创建一个接口该接口没有使用特定的持久性技术注释进行注释 如 javax.persistence 中的Entity或 mongo 中的Document通过从 spring-data-commons 模块即 Repository 或 CrudRepository扩展接口 - 这根本不起作用因为 spring 基本上不知道你的实体与哪个数据存储相关联。 在 Spring 内部有一个抽象称为RepositoryFactoryBeanSupport。尝试将 spring data jdbc starter 和 spring data mongodb starter 添加到您的项目中。你会注意到在类路径中有2 个不同的 RepositoryFactoryBeanSupport 实现 JdbcRepositoryFactoryBean来自spring data jdbc starterMongoRepositoryFactoryBean来自spring data mongo starter 如何让不同的repo关联相应的数据库 扩展特定于技术的存储库。例如如果希望实体 A 与 PostgreSQL 关联则不要使用 CrudRepository - 应该使用 JpaRepository。如果希望实体 B 与 Redis 相关联请使用 RedisRepository 等。使用注释对您的实体进行注释表明它隶属于特定的数据存储。如Entity、Document、Table 等。 总结 注分包扫描是解决问题的重点 很久之前写的文章了在看之前回想一下依然没有清晰的理解 复习一遍就掌握了学而时习之不亦乐乎 关注点赞一键三连感谢支持
- 上一篇: 东莞艺美网站建设营销方式和营销策略
- 下一篇: 东莞营销网站建设费用网站备案名称重复
相关文章
-
东莞艺美网站建设营销方式和营销策略
东莞艺美网站建设营销方式和营销策略
- 技术栈
- 2026年03月21日
-
东莞想做网站营业推广的概念
东莞想做网站营业推广的概念
- 技术栈
- 2026年03月21日
-
东莞响应式网站价格centos7系统做网站
东莞响应式网站价格centos7系统做网站
- 技术栈
- 2026年03月21日
-
东莞营销网站建设费用网站备案名称重复
东莞营销网站建设费用网站备案名称重复
- 技术栈
- 2026年03月21日
-
东莞营销网站建设价格甘肃省城乡和住房建设厅网站
东莞营销网站建设价格甘肃省城乡和住房建设厅网站
- 技术栈
- 2026年03月21日
-
东莞在哪里学网站建设金融做市场广告挂哪些网站
东莞在哪里学网站建设金融做市场广告挂哪些网站
- 技术栈
- 2026年03月21日






