-
引入依赖
在pom.xml中添加依赖,只需在spring中引入spring-data-mongodb依赖就好,里面会有MongoDB驱动和其他支持依赖
<!-- spring整合MongoDB --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.0.6.RELEASE</version> </dependency>
注意版本问题,每个版本对应的spring版本都不一样,本项目的spring版本是5.0.5.RELEASE,所以引入的spring-data-mongodb的版本是2.0.6.RELEASE,和spring版本适配
-
编写配置
在module.properties中添加属性
#MongoDB配置 #主机 mongo.host=localhost #端口号 mongo.port=27017 #库名称 mongo.dbname=ksc #账号 mongo.username=zhupeng #密码 mongo.password=zhupeng #每个主机允许的连接数,一个线程变为可用的最大阻塞数 mongo.connectionsPerHost=8 #线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值 mongo.threadsAllowedToBlockForConnectionMultiplier=4 #连接超时时间(毫秒) mongo.connectTimeout=1000 #最大等待时间 mongo.maxWaitTime=1500 #scoket保持活动 mongo.socketKeepAlive=true #scoket超时时间 mongo.socketTimeout=1500
此时需要编写spring-mongo.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-2.0.xsd ">s <!-- 方式一: 直接IP和端口号连接数据库--> <mongo:mongo-client id="mongo" host="${mongo.host}" port="${mongo.port}"> <!-- 方式二:IP和端口号连接数据库,并使用用户和密码连接,需要在后面一定添加?authMechanism=SCRAM-SHA-1,血泪史 --> <!-- <mongo:mongo-client id="mongo" host="${mongo.host}" port="${mongo.port}"--> <!-- credentials="${mongo.username}:${mongo.password}@${mongo.dbname}?authMechanism=SCRAM-SHA-1">--> <mongo:client-options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" /> </mongo:mongo-client> <!-- 设置使用的数据库名 MongoRepositoryFactory--> <mongo:db-factory id="mongoDbFactory" dbname="${mongo.dbname}" mongo-ref="mongo" /> <!-- mongodb的模板 --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean> <!-- mongo-template-ref="mongoTemplate" 要加,不然MongoRepository用不了,血泪史--> <mongo:repositories base-package="com.digiwin.app.ttt.service.mongo.repository" mongo-template-ref="mongoTemplate" repository-impl-postfix="repository"/> </beans>
-
编写代码
我们定义一个doc实体KnowledgeDoc,用于插入的数据
@Document(collection = "knowledge_data") public class KnowledgeDoc<T> extends BaseDoc { @Field("code") private String code; @Field("name") private String name; @Field("source") private String source; @Field("tag") private List<String> tag; @Field("document") private String document; @Field("status") private Boolean status; @Field("customize") private T customize; @Field("description") private String description; //此处省略setter getter方法 }
编写repository仓储类
/** *此处使用 MongoRepository 方式对数据进行简单的增删改查,MongoRepository<Doc实体, 主键类型> */ public interface KnowledgeRepository extends MongoRepository<KnowledgeDoc,String> { }
此处整合MongoDB的两种方法:MongoRepository和MongoTemplate,灵活使用,默认需要MongoTemplate就可以了,本人在整合MongoRepository时出现大坑,网上的配置写法都一样,但都是错误的,都是相互copy的吧。
编写service接口和实现类
public interface KnowledgeService { /** * 测试方法,新增数据 * @return */ Object addData(); }
/** * @Author: zhupeng@digiwin.com * @Datetime: 2021/11/2 15:26 * @Description: * @Version: 0.0.0.1 */ @Service public class KnowledgeServiceImpl implements KnowledgeService { //注入方式一:构造注入MongoRepository private KnowledgeRepository repository; public KnowledgeServiceImpl(KnowledgeRepository repository) { this.repository = repository; } //注入方式二:Autowired注入MongoTemplate @Autowired private MongoTemplate mongoTemplate; /** * 测试方法,新增数据 * * @return */ @Override public Object addData() { KnowledgeDoc<CustomizeDoc> knowledgeDoc = new KnowledgeDoc<CustomizeDoc>(); SubprojectDoc subprojectDoc = new SubprojectDoc(); subprojectDoc.setDeliveryConfirmationNo("201810260071"); subprojectDoc.setProductName("专案管理—专案规格书—WF"); subprojectDoc.setStage("1"); subprojectDoc.setStatus(false); subprojectDoc.setSubprojectCode("20181026007"); subprojectDoc.setSubprojectName("20181026007"); CustomizeDoc customizeDoc = new CustomizeDoc(); List<SubprojectDoc> subprojectDocs = new ArrayList<>(); subprojectDocs.add(subprojectDoc); customizeDoc.setSubproject(subprojectDocs); customizeDoc.setProjectCode("00000001"); customizeDoc.setProjectName("认购订单"); customizeDoc.setCustomerCode("0000130503"); customizeDoc.setCustomerName("太平洋自行车"); customizeDoc.setOrderNumber("180090912"); customizeDoc.setServiceCode("02276000"); knowledgeDoc.setCustomize(customizeDoc); knowledgeDoc.setCode("00000001"); knowledgeDoc.setName("认购订单"); knowledgeDoc.setDescription("专案管理—专案规格书—WF"); knowledgeDoc.setSource("CRM"); knowledgeDoc.setStatus(false); knowledgeDoc.setTenantsid(Long.parseLong(ApplicationToken.tenantSid)); knowledgeDoc.setCreateName("张三"); knowledgeDoc.setCreateTime(new Date()); System.out.println(ChangeUtil.beanToString(knowledgeDoc)); //方式一:使用MongoRepository实现新增数据 repository.insert(knowledgeDoc); //方式二:使用MongoTemplate实现新增数据 //mongoTemplate.insert(knowledgeDoc); return "新增成功"; } }
调用,此处木有用postman工具调用接口。在项目启动后,自动执行,去调用新增方法,起到postman调用接口的效果
/** *项目启动后,自动执行 */ public class LoadServiceImpl implements ILoadService { Logger logger = LoggerFactory.getLogger(LoadServiceImpl.class); private KnowledgeService knowledgeService; @Override public Object onLoad(Map<String, Object> map) throws Exception { Object data = knowledgeService.addData(); logger.info((String) data); return "OK"; } }
-
测试
Spring5.x集成MongoDB
最新推荐文章于 2024-11-19 09:30:00 发布