首页>>后端>>Spring->springboot集成大全(springboot集成camunda)

springboot集成大全(springboot集成camunda)

时间:2023-12-02 本站 点击:0

SpringBoot进阶之日志集成(logback)

大家好,一直以来我都本着 用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫

「大佬可以绕过 ~」

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了 Springboot 基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础 中间件 的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有 收获 ~

上期带大家学习了什么是 跨域 以及 Springboot 中如何处理它, 本期将带大家学习 SpringBoot 中如何集成 日志 工具,同样的,我们集成到 Springboot 中。最近github可能会被墙,所以我把源码放到了国内gitee上,本节我们依然使用上期的代码

本期没有太多的理论,大家跟着配就好了, 添加配置 resources/logback-spring.xml

配置好后, 我们运行项目,会发现跟目录多了一个 logs 的目录,那个就是日志文件,跟控制台产生的日志一样,被记录到文件里了。然后教大家怎么去打日志:

请求后发现控制台有打印,并且文件有记录,那么就成功了~ 依次类推,在你觉得需要记录的位置,进行日志记录就可以了,比如一些报错的地方或者一些关键点的地方

有时候,我们需要查看 sql 怎么执行的,但控制台啥输出没有可不行,下面教大家配一下:

配置好后,执行一下查询请求,会发现控制台有详细的 sql log 包括入参的值

本期就到这里结束了,总结一下,主要教大家如何在项目中配置 log ,因为我们的服务是跑在服务器上的,具体发生了啥,我们不知道,只能依赖 log ,所以还是比较重要的

Drools集成SpringBoot

为了更好的在项目中使用Drools,

需要把Drools集成到Spring Boot,

下面介绍集成的方法,

并且开发简单的Demo和测试用例。

pom.xml工程信息:

引入spring-boot-starter-web作为Web工程,对外提供Rest服务,

引入spring-boot-starter-log4j2日志框架,打印测试匹配结果,

引入spring-boot-starter-test测试框架,开发Junt5测试用例:

通过kie-spring引入Drools相关的jar包,

其依赖的spring版本都排除掉,

以上一步的spring boot依赖为准。

启动类DroolsApplication.java:

操作的对象Person,

Person.java:

对外提供的Rest服务,

可以对Person对象进行规则匹配,

提供了两个接口,

单个和批量的操作接口:

PersonRuleController.java:

在上面PersonRuleController中需要用到KieContainer,

这个必须在Spring中先初始化才能使用,

相关功能由DroolsAutoConfiguration.java提供:

在DroolsAutoConfiguration中指定了drl规则文件

所在目录rules/com/ai/prd/,

在src/main/resources/rules/com/ai/prd/目录下新建文件

ai-rules.drl:

规则1匹配名字为bob的人,并且调用工具类PersonRuleAction打印相关日志,

同时打印规则的名称和包路径到控制台。

规则2匹配年龄在25到65之间的打工人,

然后把匹配到的人直接打印到控制台。

PersonRuleAction.java在匹配到相应规则时被调用,

此处仅实现日志打印的功能:

在src/main/resources目录下,

新建日志配置文件Log4j2.xml:

日志文件配置后,

PersonRuleAction类打印的日志

不仅会输出到log/rule_result.log,

也会输出到控制台。

针对上面PersonRuleController提供的Rest接口,

开发两个Junit5的测试用例,

在src/test/java/目录下

创建PersonRuleControllerTest.java:

PersonRuleControllerTest执行后,

控制台输出:

cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule

大概率是rule规则文件有问题,

格式,中英文字符,语法等问题,

请确保规则文件正确。

可以安装相应插件打开规则文件,

请参考:

Drools的Eclipse_IDEA插件安装

Drools规则引擎 系列教程(一)SpringBoot整合 快速集成上手

《Drools7.0.0.Final规则引擎教程》之Springboot集成

Drools创建Maven工程

Springboot集成ES及JPA

springboot maven项目结构

package com.example.esboot.entity;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.experimental.Accessors;

import org.springframework.data.annotation.Id;

import org.springframework.data.elasticsearch.annotations.Document;

@Data

@NoArgsConstructor

@Accessors(chain =true)

@Document(indexName ="person",type ="_doc", shards =1, replicas =0)

public class Person {

    private Integerid;

private Stringname;

private Stringsex;

public Integer getId() {return id;}

public void setId(Integer id) {this.id = id;}

public String getName() {return name;}

public void setName(String name) {this.name = name;}

public String getSex() {return sex;}

public void setSex(String sex) {this.sex = sex;}

}

Elasticsearch 的JPA 使用

PersonRepository.java

package com.example.esboot.repository;

import com.example.esboot.entity.Person;

import org.springframework.data.elasticsearch.annotations.Highlight;

import org.springframework.data.elasticsearch.annotations.HighlightField;

import org.springframework.data.elasticsearch.core.SearchHit;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

public interface PersonRepositoryextends ElasticsearchRepository {

@Highlight(fields = {

@HighlightField(name ="name"),

@HighlightField(name ="sex")

})

List findByNameOrSex(String text, String sex);

}

PersonService.java

package com.example.esboot.servcie;

import com.example.esboot.entity.Person;

import java.util.List;

public interface PersonService{

public Person findById(String id);

public String save(Person person);

Iterable findAll();

List findByNameOrSex(String text,String sex);

}

PersonServiceImpl.java

package com.example.esboot.servcie.impl;

import com.example.esboot.entity.Person;

import com.example.esboot.repository.PersonRepository;

import com.example.esboot.servcie.PersonService;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.ArrayList;

import java.util.List;

import java.util.stream.Collectors;

@Service

public class PersonServiceImplimplements PersonService {

@Resource

    PersonRepositorypersonRepository;

@Override

    public List findByNameOrSex(String text, String sex) {

List list =new ArrayList();

personRepository.findByNameOrSex(text, sex).forEach(personSearchHit -list.add(personSearchHit.getContent()));

return list;

}

@Override

    public Person findById(String id) {

return personRepository.findById(id).get();

}

@Override

    public String save(Person person) {

return personRepository.save(person).getName();

}

@Override

    public Iterable findAll() {

return personRepository.findAll();

}

}

spring.elasticsearch.rest.uris=

spring.elasticsearch.rest.connection-timeout=300s

spring.data.elasticsearch.repositories.enabled=true

EsTest.java

package com.example.esboot.es;

import com.example.esboot.entity.Person;

import com.example.esboot.servcie.PersonService;

import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.data.elasticsearch.core.ElasticsearchOperations;

import org.junit.Test;

import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;

import org.springframework.data.elasticsearch.core.query.IndexQuery;

import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

import java.util.List;

@SpringBootTest

@RunWith(SpringJUnit4ClassRunner.class)

public class EsTest {

@Resource

    private ElasticsearchOperationselasticsearchOperations;

@Resource

    private PersonServicepersonService;

@Test

    public void test() {

Person person =new Person();

person.setId(1);

person.setName("baijie");

person.setSex("n");

IndexQuery indexQuery =new IndexQueryBuilder().withId(String.valueOf(person.getId())).withObject(person).build();

String docId =elasticsearchOperations.index(indexQuery, IndexCoordinates.of("person"));

System.out.println(docId);

}

@Test

    public void save() {

Person person =new Person();

person.setId(2);

person.setName("中国");

person.setSex("男");

String name =personService.save(person);

System.out.println(name);

}

@Test

    public void findByNameOrSex() {

List byNameOrSex =personService.findByNameOrSex("baijie","男");

System.out.println(byNameOrSex);

}

@Test

    public void findAll() {

personService.findAll().forEach(person - {

System.out.println(person);

});

}

@Test

    public void queryForObject() {

Person person =personService.findById("1");

System.out.println(person);

}

}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Spring/10015.html