# springboot-demo
基于springboot后台框架,涉及技术,通用mapper,shiro,mysql,redis
## es模块
最近在学习es,起码要先有个es环境吧,然后再是整合到代码中使用一下,毕竟只有实践才会有深刻的记忆,这就是所谓的经验啊,下面开始吧,本文分两部分,第一部分配置es环境,第二部分整合到springboot中进行简单的操作,本人也是初次学习,如有错误欢迎指出修正,
本文示例代码不严谨,仅供参考
一、 docker 安装es
1、 拉取镜像
```
# 搜索镜像
docker search elasticsearch
# 拉取镜像
docker pull elasticsearch
```
2、创建本地映射文件,我的本地es映射主目录是/docker/es
```
cd /docker/es
mkdir data
mkdir plugins
mkdir config
cd config
vim es.yml
```
3、es.yml文件内容如下
```
cluster.name: elasticsearch-cluster
node.name: es-node1
network.bind_host: 0.0.0.0
network.publish_host: localhost
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
```
4、创建并启动容器
```
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -p 5601:5601 --restart=always -v /docker/es/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /docker/es/plugins1:/usr/share/elasticsearch/plugins -v /docker/es/data1:/usr/share/elasticsearch/data --name my_es elasticsearch
# 命令解析
-e 指定运行内存
-d 后台运行
-p 指定端口
--restart=always 启动docker自动启动容器
-v 指定映射文件
--name 容器名称
最后的elasticsearch是刚才拉取的镜像名称
```
5、浏览器插件访问es,telnet9200可以通说明都可以说明搭建成功, http://127.0.0.1:9200/
二、 整合springboot里面去
1、pom.xml
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
```
2、application.yml
```
spring:
data:
elasticsearch:
cluster-name: elasticsearch-cluster
cluster-nodes: 127.0.0.1:9300
repositories:
enabled: true
```
3、 ElasticSearchConfig
```
@SpringBootConfiguration
public class ElasticSearchConfig {
@PostConstruct
void init() {
System.setProperty("es.set.netty.runtime.available.processors", "false");
}
}
```
4、 bean
```
ESDocument
@Data
@Document(indexName = "poms", type = "content")
public class ESDocument {
@Id
private String id;
@Field(analyzer = "ik_smart", searchAnalyzer = "ik_smart")
private String name;
private String projectId;
public ESDocument(String id, String name, String projectId) {
this.id = id;
this.name = name;
this.projectId = projectId;
}
public ESDocument() {
}
}
/**
* @Document 作用在类,标记实体类为文档对象,一般有两个属性
* indexName:对应索引库名称
* type:对应在索引库中的类型
* shards:分片数量,默认5
* replicas:副本数量,默认1
* @Id 作用在成员变量,标记一个字段作为id主键
* @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
* type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等
* text:存储数据时候,会自动分词,并生成索引
* keyword:存储数据时候,不会分词建立索引
* Numerical:数值类型,分两类
* 基本数据类型:long、integer、short、byte、double、float、half_float
* 浮点数的高精度类型:scaled_float
* 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
* Date:日期类型
* elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
* index:是否索引,布尔类型,默认是true
* store:是否存储,布尔类型,默认是false
* analyzer:分词器名称,这里的ik_max_word即使用ik分词器
*
*/
```
5、DocumentSearchService
```
void save(ESDocument esDocument);
void delete(String id);
void getById(String id);
void getByName(String name,String projectId);
```
6.DocumentSearchServiceImpl
```
@Autowired
private DocumentSearchRepository documentSearchRepository;
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Override
public void save(ESDocument esDocument) {
ESDocument save = documentSearchRepository.save(esDocument);
System.out.println(save.toString());
}
@Override
public void delete(String id) {
documentSearchRepository.deleteById(id);
}
@Override
public void getById(String id) {
ESDocument esDocument = documentSearchRepository.findById(id).orElse(new ESDocument());
System.out.println(esDocument.toString());
}
@Override
public void getByName(String name, String projectId) {
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("name",name)).withQuery(matchQuery("projectId",projectId)).build();
List<ESDocument> esDocuments = elasticsearchTemplate.queryForList(searchQuery, ESDocument.class);
esDocuments.forEach(e-> System.out.println(e.toString()));
}
```
7、DocumentSearchRepository
```
@Repository
public interface DocumentSearchRepository extends ElasticsearchRepository<ESDocument,String> {
}
```
8、test
```
@RunWith(SpringRunner.class)
@SpringBootTest
public class EsTests {
@Autowired
private DocumentSearchService documentSearchService;
@Test
public void save() {
documentSearchService.save(new ESDocument(UUID.randomUUID().toString(),"name1","1"));
}
@Test
public void getById(){
documentSearchService.getById("98c717e2-0e17-4887-86f6-e9cd347f97f7");
}
@Test
public void getByName(){
documentSearchService.getByName("name1","1");
}
@Test
public void delete(){
documentSearchService.delete("98c717e2-0e17-4887-86f6-e9cd347f97f7");
}
}
```
9、到这基本整合就结束了,展示了一个增删查,没有修改,修改本人暂时也没有看。,待后续学习继续分享经验吧,下面说一下整合过程遇到的坑
### 坑1
##### 报错信息
```
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren
妄北y
- 粉丝: 2w+
- 资源: 1万+
最新资源
- Labview多列列表框操作框架,JKI+队列状态机,带一些OOP,扩展性强,具体看下图
- 移动机器人动态避障仿真,DWA方法,包含静态障碍物和动态障碍物,实现对障碍物避障的路径规划
- 基于stm32芯片仿真的倒车测距提示系统 包含演示视频 报告 proteus仿真 keil代码 以stm32为最小系统电路进行连接,按钮控制系统开关,使用SRF04采集倒车,LM016L液晶显示屏显示
- 魔术公式轮胎模型,m文件,magic formula 可供参考
- Matlab代码:含热网的综合能源系统(IES)优化运行 风电、光伏、CHP机组(燃气燃煤)、燃气锅炉、火力发电机组,吸收式制冷机、电制冷机、蓄电池,蓄热罐等设备 负荷类型:冷、热、电 优化目标:IE
- 昆仑通泰mcgs触摸屏和台达VFD-M变频器和天正变频器的rtu通讯示例硬件:mcgs触摸屏(没屏电脑也可实现),台达vfd-m变频器
- MATLAB环境下一种基于机器学习(霍特林统计量,高斯混合模型,支持向量机)的工业数据异常检测 算法运行环境为MATLAB R2021B,执行基于机器学习(霍特林统计量,高斯混合模型,支持向量机)的
- 基于自适应滑膜观测器的轮胎力估计,可估计纵向轮胎力和侧向轮胎力,估计的结果比dugoff轮胎模型计算轮胎力的精度更高 基于分布式驱动电动汽车的车辆状态估计,分别采用无迹卡尔曼,容积卡尔曼进行估计,可
- 电钻方案,电扳手方案,低速力矩保持,堵转不停,脉冲注入 IPD初始位置检测,无刷电机控制方案,BLDC控制器,电动工具开发套件 含有脉冲注入检测位置,具备电感法 含有过温保护,过流保护,欠压保护等
- 51单片机开发的8层电梯项目,定时模拟版,包括程序源码和protues仿真,程序源码注释详细,非常适合单片机开发人员
- 威纶通MODBUS控制两台台达变频器通讯程序 ~ 可以通过触摸屏控制变频器正反转,运行停止,还能监视变频器的运行频率,输出频率,输出电压,输出电流以及转速 有做笔记,详细内容见笔记 EB8000
- DAB双有源全桥MATLAB双闭环移相ZVS 高频隔离DC DC变器模型(DAB-双有源全桥),基于MATLAB Simulink建模仿真 电压电流双闭环控制,功率双向流动,ZVS软开关 仿真模型
- carsim-simulink联合仿真,ACC自动巡航跟随 在simulink搭建控制策略,上下层分层控制 包含安全距离模型,逆发动机模型,逆制动模型,制动 驱动策略切模块,cpar文件,simf
- soc基于Matlab Simulink实现了以下功能,搭建了储能系统变模型以及钒液流电池模型,仿真效果较好,系统充放电正常 下图为系统模型图,电池输出电压电流以及SOC波形 1.钒液流电池本体建
- Webots 12自由度四足robot仿真模型 四条独立运动的腿,单腿含有三个自由度,每个自由度包含一个电机和一个电机编码器,可以像舵机一样使用位置控制,也可结合编码器使用力矩 单腿的足端包含一个
- 英威腾GD300驱动板IO板主控板方案资料原理图 英威腾变频器GD300量产方案 程序源码 主控板、驱动板、IO板 原理图 PCB bom 工艺文件,源程序
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈