springboot 实现mqtt物联网的示例代码

网友投稿 298 2023-01-24

springboot 实现mqtt物联网的示例代码

Springboot整合mybatisPlus+mysql+druid+swaggerUI+ mqtt 整合mqtt整合druid整合mybatis-plus完整pom完整yml整合swaggerUi整合log4j MQTT 物联网系统基本架构本物联网系列

mqtt)

整合mqtt

org.springframework.boot

spring-boot-starter-integration

org.springframework.integration

spring-integration-stream

org.springframework.integration

spring-integration-mqtt

yml

iot:

mqtt:

clientId: ${random.value}

defaultTopic: topic

shbykjTopic: shbykj_topic

url: tcp://127.0.0.1:1883

username: admin

password: admin

completionTimeout: 3000

package com.shbykj.handle.mqtt;

import lombok.Getter;

import lombok.Setter;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.integration.annotation.IntegrationComponentScan;

import org.springframework.stereotype.Component;

/**

* @Author: wxm

* @Description: mqtt基础配置类

*/

@Getter

@Setter

@Component

@IntegrationComponentScan

@ConfigurationProperties(prefix = "iot.mqtt")

public class BykjMqttConfig {

/*

*

* 服务地址

*/

private String url;

/**

* 客户端id

*/

private String clientId;

/*

*

* 默认主题

*/

private String defaultTopic;

/*

*

* 用户名和密码*/

private String username;

private String password;

/**

* 超时时间

*/

private int completionTimeout;

/**

* shbykj自定义主题

*/

private String shbykjTopic;

}

package com.shbykj.handle.mqtt.producer;

import org.springframework.integration.annotation.MessagingGateway;

import org.springframework.integration.mqtt.support.MqttHeaders;

import org.springframework.messaging.handler.annotation.Header;

/**

* @description rabbitmq mqtt协议网关接口

* @date 2020/6/8 18:26

*/

@MessagingGateway(defaultRequestChannel = "iotMqttInputChannel")

public interface IotMqttGateway {

void sendMessage2Mqtt(String data);

void sendMessage2Mqtt(String data, @Header(MqttHeaders.TOPIC) String topic);

void sendMessage2Mqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String payload);

}

package com.shbykj.handle.mqtt;

import org.eclipse.paho.client.mqttv3.MqttConnectOptions;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.integration.annotation.ServiceActivator;

import org.springframework.integration.channel.DirectChannel;

import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;

import org.springframework.integration.mqtt.core.MqttPahoClientFactory;

import org.springframework.messaging.MessageChannel;

import org.springframework.messaging.MessageHandler;

import org.springframework.messaging.MessagingException;

@Configuration

public class IotMqttProducerConfig {

public final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired

private BykjMqttConfig mqttConfig;

/*

*

* MQTT连接器选项

* *

*/

@Bean(value = "getMqttConnectOptions")

public MqttConnectOptions getMqttConnectOptions1() {

MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();

// 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接

mqttConnectOptions.setCleanSession(true);

// 设置超时时间 单位为秒

mqttConnectOptions.setConnectionTimeout(mqttConfig.getCompletionTimeout());

mqttConnectOptions.setAutomaticReconnect(true);

mqttConnectOptions.setUserName(mqttConfig.getUsername());

mqttConnectOptions.setPassword(mqttConfig.getPassword().toCharArray());

mqttConnectOptions.setServerURIs(new String[]{mqttConfig.getUrl()});

// 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送心跳判断客户端是否在线,但这个方法并没有重连的机制

mqttConnectOptions.setKeepAliveInterval(10);

// 设置“遗嘱”消息的话题,若客户端与服务器之间的连接意外中断,服务器将发布客户端的“遗嘱”消息。

//mqttConnectOptions.setWill("willTopic", WILL_DATA, 2, false);

return mqttConnectOptions;

}

/**

* mqtt工厂

*

* @return

*/

@Bean

public MqttPahoClientFactory mqttClientFactory() {

DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();

// factory.setServerURIs(mqttConfig.getServers());

factory.setConnectionOptions(getMqttConnectOptions1());

return factory;

}

@Bean

public MessageChannel iotMqttInputChannel() {

return new DirectChannel();

}

// @Bean

// @ServiceActivator(inputChannel = "iotMqttInputChannel")

// public MessageHandler mqttOutbound() {

// MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(mqttConfig.getClientId(), mqttClientFactory());

// messageHandler.setAsync(false);

// messageHandler.setDefaultQos(2);

// messageHandler.setDefaultTopic(mqttConfig.getDefaultTopic());

// return messageHandler;

// }

@Bean

@ServiceActivator(inputChannel = "iotMqttInputChannel")

public MessageHandler handlerTest() {

return message -> {

try {

String string = message.getPayload().toString();

System.out.println(string);

} catch (MessagingException ex) {

ex.printStackTrace();

logger.info(ex.getMessage());

}

};

}

}

package com.shbykj.handle.mqtt;

import org.eclipse.paho.client.mqttv3.MqttConnectOptions;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.integration.annotation.ServiceActivator;

import org.springframework.integration.channel.DirectChannel;

import org.springframework.integration.core.MessageProducer;

import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;

import org.springframework.integration.mqtt.core.MqttPahoClientFactory;

import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;

import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;

import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;

import org.springframework.messaging.Message;

import org.springframework.messaging.MessageChannel;

import org.springframework.messaging.MessageHandler;

import org.springframework.messaging.MessagingException;

/**

* @Author: xiaofu

* @Description: 消息订阅配置

* @date 2020/6/8 18:24

*/

@Configuration

public class IotMqttSubscriberConfig {

public final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired

private MqttReceiveHandle mqttReceiveHandle;

@Autowired

private BykjMqttConfig mqttConfig;

/*

*

* MQTT连接器选项

* *

*/

@Bean(value = "getMqttConnectOptions")

public MqttConnectOptions getMqttConnectOptions1() {

MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();

// 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接

mqttConnectOptions.setCleanSession(true);

// 设置超时时间 单位为秒

mqttConnectOptions.setConnectionTimeout(10);

mqttConnectOptions.setAutomaticReconnect(true);

// mqttConnectOptions.setUserName(mqttConfig.getUsername());

// mqttConnectOptions.setPassword(mqttConfig.getPassword().toCharArray());

mqttConnectOptions.setServerURIs(new String[]{mqttConfig.getUrl()});

// 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送心跳判断客户端是否在线,但这个方法并没有重连的机制

mqttConnectOptions.setKeepAliveInterval(10);

// 设置“遗嘱”消息的话题,若客户端与服务器之间的连接意外中断,服务器将发布客户端的“遗嘱”消息。

//mqttConnectOptions.setWill("willTopic", WILL_DATA, 2, false);

return mqttConnectOptions;

}

/*

*

*MQTT信息通道(生产者)

**

*/

@Bean

public MessageChannel iotMqttOutboundChannel() {

return new DirectChannel();

}

/*

*

*MQTT消息处理器(生产者)

**

*/

@Bean

@ServiceActivator(inputChannel = "iotMqttOutboundChannel")

public MessageHandler mqttOutbound() {

MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(mqttConfig.getClientId(), mqttClientFactory());

messageHandler.setAsync(true);

messageHandler.setDefaultTopic(mqttConfig.getDefaultTopic());

return messageHandler;

}

/*

*

*MQTT工厂

**

*/

@Bean

public MqttPahoClientFactory mqttClientFactory() {

DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();

// factory.setServerURIs(mqttConfig.getServers());

factory.setConnectionOptions(getMqttConnectOptions1());

return factory;

}

/*

*

*MQTT信息通道(消费者)

**

*/

@Bean

public MessageChannel iotMqttInputChannel() {

return new DirectChannel();

}

/**

* 配置client,监听的topic

* MQTT消息订阅绑定(消费者)

***/

@Bean

public MessageProducer inbound() {

MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(mqttConfig.getClientId(), mqttClientFactory(), mqttConfig.getDefaultTopic(), mqttConfig.getShbykjTopic());

adapter.setCompletionTimeout(mqttConfig.getCompletionTimeout());

adapter.setConverter(new DefaultPahoMessageConverter());

adapter.setQos(2);

adapter.setOutputChannel(iotMqttInputChannel());

return adapter;

}

/**

* @author wxm

* @description 消息订阅

* @date 2020/6/8 18:20

*/

@Bean

@ServiceActivator(inputChannel = "iotMqttInputChannel")

public MessageHandler handler() {

return new MessageHandler() {

@Override

public void handleMessage(Message> message) throws MessagingException {

//处理接收消息

try {

mqttReceiveHandle.handle(message);

} catch (Exception e) {

logger.warn("消息处理异常"+e.getMessage());

e.printStackTrace();

}

}

};

}

}

package com.shbykj.handle.mqtt;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import com.shbykj.handle.common.DataCheck;

import com.shbykj.handle.common.RedisKey;

import com.shbykj.handle.common.RedisUtils;

import com.shbykj.handle.common.constants.Constants;

import com.shbykj.handle.common.model.ShbyCSDeviceEntity;

import com.shbykj.handle.common.model.sys.SysInstrument;

import com.shbykj.handle.resolve.mapper.SysInstrumentMapper;

import com.shbykj.handle.resolve.util.DateUtils;

import com.shbykj.handle.resolve.util.ShbyCSDeviceUtils;

import lombok.extern.slf4j.Slf4j;

import org.apache.commons.collections.BidiMap;

import org.apache.commons.collections.bidimap.DualHashBidiMap;

import org.apache.commons.lang3.StringUtils;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;

import org.eclipse.paho.client.mqttv3.MqttCallback;

import org.eclipse.paho.client.mqttv3.MqttMessage;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.integration.mqtt.support.MqttHeaders;

import org.springframework.messaging.Message;

import org.springframework.stereotype.Component;

import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

/*

*

* mqtt客户端消息处理类

* **/

@Component

@Slf4j

@Transactional

public class MqttReceiveHandle implements MqttCallback {

private static final Logger logger = LoggerFactory.getLogger(MqttReceiveHandle.class);

@Value("${shbykj.checkCrc}")

private boolean checkcrc;

@Autowired

private SysInstrumentMapper sysInstrumentMapper;

@Autowired

private RedisUtils redisUtils;

public static BidiMap bidiMap = new DualHashBidiMap();

//记录bykj协议内容

public static Map> devMap = new HashMap();

//记录上限数量

// public static Map ctxMap = new HashMap();

public void handle(Message> message) {

try {

logger.info("{},客户端号:{},主题:{},QOS:{},消息接收到的数据:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), message.getHeaders().get(MqttHeaders.ID), message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC), message.getHeaders().get(MqttHeaders.RECEIVED_QOS), message.getPayload());

//处理mqtt数据

this.handle(message.getPayload().toString());

} catch (Exception e) {

e.printStackTrace();

log.error("处理错误" + e.getMessage());

}

}

private void handle(String str) throws Exception {

boolean flag = this.dataCheck(str);

if (flag) {

ShbyCSDeviceEntity shbyCSDeviceEntity = ShbyCSDeviceUtils.convertToSysInstrumentEntity(str);

String deviceNumber = shbyCSDeviceEntity.getPN();

String smpId = shbyCSDeviceEntity.getSMP_ID();

String smpName = shbyCSDeviceEntity.getSMP_NAME();

String smpWt = shbyCSDeviceEntity.getSMP_WT();

if (StringUtils.isEmpty(smpId) || StringUtils.isEmpty(smpName) || StringUtils.isEmpty(smpWt)) {

log.error("过滤无实际作用报文信息", str);

logger.error("过滤无实际作用报文信息", str);

return;

}

//判断设备id是否存在数据库中,存在才进行数据部分处理

//不存在就提醒需要添加设备:

QueryWrapper wrapper = new QueryWrapper();

wrapper.eq("number", deviceNumber);

wrapper.eq("is_deleted", Constants.NO);

SysInstrument sysInstrument = sysInstrumentMapper.selectOne(wrapper);

if (null == sysInstrument) {

log.error("碳氧仪不存在或已删除,设备号:{}", deviceNumber);

logger.error("碳氧仪不存在或已删除,设备号:{}", deviceNumber);

return;

}

try {

//增加实时数据

String instrumentId = sysInstrument.getId().toString();

String realDataKey = RedisKey.CSdevice_DATA_KEY + instrumentId;

this.redisUtils.set(realDataKey, shbyCSDeviceEntity);

System.out.println(shbyCSDeviceEntity);

//通讯时间

String onlineTime = "shbykj_mqtt:onlines:" + instrumentId;

this.redisUtils.set(onlineTime, shbyCSDeviceEntity.getDataTime(), (long) Constants.RedisTimeOut.REAL_TIME_OUT);

log.info("实时数据已经更新:设备主键id" + instrumentId);

logger.info("{} 实时数据已经更新:设备主键id:{}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()),instrumentId);

} catch (Exception var1) {

log.error("redis处理实时报文数据逻辑异常 :" + var1.getMessage());

logger.error("redis处理实时报文数据逻辑异常 :" + var1.getMessage());

}

}

}

private boolean dataCheck(String message) {

boolean flag = DataCheck.receiverCheck(message);

if (!flag) {

return false;

} else {

int i = message.indexOf("QN=");

if (i < 0) {

log.warn("数据包中没有QN号码: " + message);

logger.warn("数据包中没有QN号码: " + message);

return false;

} else {

i = message.indexOf("PN=");

if (i < 0) {

log.warn("数据包中没有PN号码: " + message);

logger.warn("数据包中没有PN号码: " + message);

return false;

} else {

if (this.checkcrc) {

flag = DataCheck.checkCrc(message);

if (!flag) {

log.warn("crc校验失败: " + message);

logger.warn("数据包中没有PN号码: " + message);

return false;

}

}

return true;

}

}

}

}

/**

* 连接丢失

*

* @param throwable

*/

@Override

public void connectionLost(Throwable throwable) {

logger.warn("连接丢失-客户端:{},原因:{}", throwable.getMessage());

}

/**

* 消息已到达

*

* @param s

* @param mqttMessage

* @throws Exception

*/

@Override

public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {

}

/**

* 完成消息回调

*

* @param iMqttDeliveryToken

*/

@Override

public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

}

}

整合druid

pom

com.alibaba

druid-spring-boot-starter

1.1.10

druid-bean.xml

xmlns:aop="http://springframework.org/schema/aop" xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/aop

http://springframework.org/schema/aop/spring-aop.xsd">

class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">

scope="prototype">

com.shbykj.*.service.*.impl.*

pointcut-ref="druid-stat-pointcut" />

xmlns:aop="http://springframework.org/schema/aop" xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/aop

http://springframework.org/schema/aop/spring-aop.xsd">

class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">

class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">

scope="prototype">

com.shbykj.*.service.*.impl.*

scope="prototype">

com.shbykj.*.service.*.impl.*

pointcut-ref="druid-stat-pointcut" />

pointcut-ref="druid-stat-pointcut" />

yml

#spring

spring:

main:

allow-bean-definition-overriding: true

# mysql DATABASE CONFIG

datasource:

druid:

filters: stat,wall,log4j2

continueOnError: true

type: com.alibaba.druid.pool.DruidDataSource

url: jdbc:mysql://localhost:3306/mqttdb?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

# see https://github.com/alibaba/druid

initialSize: 15

minIdle: 10

maxActive: 200

maxWait: 60000

timeBetweenEvictionRunsMillis: 60000

validationQuery: SELECT 1

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

poolPreparedStatements: true

keepAlive: true

maxPoolPreparedStatementPerConnectionSize: 50

connectionProperties:

druid.stat.mergeSql: true

druid.stat.slowSqlMillis: 5000

启动类加上注解@ImportResource( locations = {"classpath:druid-bean.xml"} )

整合mybatis-plus

pom

com.baomidou

spring-wind

1.1.5

com.baomidou

mybatis-plus

com.baomidou

3.1.2

mybatis-plus-boot-starter

mysql

mysql-connector-java

5.1.44

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.12

yml

#mybatis

mybatis-plus:

mapper-locations: classpath:/mapper/*.xml

typeAliasesPackage: org.spring.springboot.entity

global-config:

#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";

id-type: 3

#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"

field-strategy: 2

#驼峰下划线转换

db-column-underline: true

#刷新mapper 调试神器

refresh-mapper: true

configuration:

map-underscore-to-camel-case: true

cache-enabled: false

启动类注解@MapperScan({"com.shbykj.handle.resolve.mapper"})

完整pom

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.4.1

com.shbykj

handle

0.0.1-SNAPSHOT

handle

Demo project for Spring Boot

1.8

org.slf4j

slf4j-simple

1.7.25

compile

org.springframework.boot

spring-boot-starter-log4j2

org.projectlombok

lombok

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-logging

io.springfox

springfox-swagger-ui

2.9.2

io.springfox

springfox-swagger2

2.9.2

com.google.guava

guava

com.baomidou

spring-wind

1.1.5

com.baomidou

mybatis-plus

com.baomidou

3.1.2

mybatis-plus-boot-starter

mysql

mysql-connector-java

5.1.44

com.alibaba

druid-spring-boot-starter

1.1.10

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.12

org.springframework.boot

spring-boot-devtools

true

runtime

com.google.code.gson

gson

org.springframework.boot

spring-boot-starter-data-redis

org.apache.commons

commons-lang3

3.8.1

com.google.guava

guava

30.0-jre

cn.hutool

hutool-core

5.5.0

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.4.1

com.shbykj

handle

0.0.1-SNAPSHOT

handle

Demo project for Spring Boot

1.8

org.slf4j

slf4j-simple

1.7.25

compile

org.springframework.boot

spring-boot-starter-log4j2

org.projectlombok

lombok

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-logging

io.springfox

springfox-swagger-ui

2.9.2

io.springfox

springfox-swagger2

2.9.2

com.google.guava

guava

com.baomidou

spring-wind

1.1.5

com.baomidou

mybatis-plus

com.baomidou

3.1.2

mybatis-plus-boot-starter

mysql

mysql-connector-java

5.1.44

com.alibaba

druid-spring-boot-starter

1.1.10

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.12

org.springframework.boot

spring-boot-devtools

true

runtime

com.google.code.gson

gson

org.springframework.boot

spring-boot-starter-data-redis

org.apache.commons

commons-lang3

3.8.1

com.google.guava

guava

30.0-jre

cn.hutool

hutool-core

5.5.0

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

完整yml

server:

port: 8082

#spring

spring:

devtools:

restart:

enabled: true

main:

allow-bean-definition-overriding: true

# mysql DATABASE CONFIG

datasource:

druid:

filters: stat,wall,log4j2

continueOnError: true

type: com.alibaba.druid.pool.DruidDataSource

url: jdbc:mysql://localhost:3306/mqttdb?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

# see https://github.com/alibaba/druid

initialSize: 15

minIdle: 10

maxActive: 200

maxWait: 60000

timeBetweenEvictionRunsMillis: 60000

validationQuery: SELECT 1

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

poolPreparedStatements: true

keepAlive: true

maxPoolPreparedStatementPerConnectionSize: 50

connectionProperties:

druid.stat.mergeSql: true

druid.stat.slowSqlMillis: 5000

shbykj:

checkCrc: false

#mybatis

mybatis-plus:

mapper-locations: classpath:/mapper/*.xml

typeAliasesPackage: org.spring.springboot.entity

global-config:

#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";

id-type: 3

#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"

field-strategy: 2

#驼峰下划线转换

db-column-underline: true

#刷新mapper 调试神器

refresh-mapper: true

configuration:

map-underscore-to-camel-case: true

cache-enabled: false

#logging

logging:

config: classpath:log4j2-demo.xml

整合swaggerUi

pom

io.springfox

springfox-swagger-ui

2.9.2

io.swagger

swagger-models

1.5.21

io.springfox

springfox-swagger2

2.9.2

com.google.guava

guava

使用

package com.shbykj.handle.web.wx;

import com.baomidou.mybatisplus.core.metadata.IPage;

import com.shbykj.handle.common.RetMsgData;

import com.shbykj.handle.common.State;

import com.shbykj.handle.common.model.sys.SysInstrument;

import com.shbykj.handle.h.service.ISysInstrumentService;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiImplicitParam;

import io.swagger.annotations.ApiImplicitParams;

import io.swagger.annotations.ApiOperation;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

/**

* 监测点接口

*

* @author

* @date 2021-01-15 16:49

*/

@RestController

@RequestMapping({"/api/wxapoint"})

@Api(

tags = {"小程序 监测点接口"}

)

public class CSDevicesController extends BaseController {

@Autowired

private ISysInstrumentService sysInstrumentService;

public CSDevicesController() {

}

@ApiOperation(

value = "分页查询",

notes = "分页查询站点信息"

)

@ApiImplicitParams({@ApiImplicitParam(

name = "number",

value = "设备编号",

paramType = "query",

dataType = "String"

), @ApiImplicitParam(

name = "page",

value = "页码 从1开始",

required = false,

dataType = "long",

paramType = "query"

), @ApiImplicitParam(

name = "size",

value = "页数",

required = false,

dataType = "long",

paramType = "query"

)})

@GetMapping({"/pageByNumber"})

public RetMsgData> pageByNumber(@RequestParam(required = false) String number) {

RetMsgData msg = new RetMsgData();

try {

IPage page1 = this.getPage();

page1 = sysInstrumentService.pageByNumber(number, page1);

msg.setData(page1);

} catch (Exception var5) {

msg.setState(State.RET_STATE_SYSTEM_ERROR);

this.logger.error(var5.getMessage());

}

return msg;

}

}

package com.shbykj.handle.common.model.sys;

import com.baomidou.mybatisplus.annotation.IdType;

import com.baomidou.mybatisplus.annotation.TableField;

import com.baomidou.mybatisplus.annotation.TableId;

import com.baomidou.mybatisplus.annotation.TableName;

import io.swagger.annotations.ApiModel;

import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;

import java.util.Date;

@TableName("instrument")

@ApiModel("仪器配置表字段信息")

public class SysInstrument implements Serializable {

private static final long serialVersionUID = 1L;

@TableId(

value = "id",

type = IdType.AUTO

)

@ApiModelProperty(

value = "id",

name = "id",

required = true

)

private Long id;

@TableField("name")

@ApiModelProperty(

value = "名称 仪器名称",

name = "name"

)

private String name;

@TableField("number")

@ApiModelProperty(

value = "编号 仪器编号(PN)",

name = "number"

)

private String number;

@TableField("manufacturer")

@ApiModelProperty(

value = "生产厂商 生产厂商",

name = "manufacturer"

)

private String manufacturer;

@TableField("gmt_create")

@ApiModelProperty(

value = "创建时间",

name = "gmt_create"

)

private Date gmtCreate;

@TableField("gmt_modified")

@ApiModelProperty(

value = "更新时间",

name = "gmt_modified"

)

private Date gmtModified;

@TableField("is_deleted")

@ApiModelProperty(

value = "表示删除,0 表示未删除 默认0",

name = "is_deleted"

)

private Integer isDeleted;

@TableField("device_type")

@ApiModelProperty(

value = "设备类型(PT)",

name = "device_type"

)

private String deviceType;

public SysInstrument() {

}

public Long getId() {

return this.id;

}

public String getName() {

return this.name;

}

public String getNumber() {

return this.number;

}

public String getManufacturer() {

return this.manufacturer;

}

public Date getGmtCreate() {

return this.gmtCreate;

}

public Date getGmtModified() {

return this.gmtModified;

}

public Integer getIsDeleted() {

return this.isDeleted;

}

public String getDeviceType() {

return this.deviceType;

}

public void setId(final Long id) {

this.id = id;

}

public void setName(final String name) {

this.name = name;

}

public void setNumber(final String number) {

this.number = number;

}

public void setManufacturer(final String manufacturer) {

this.manufacturer = manufacturer;

}

public void setGmtCreate(final Date gmtCreate) {

this.gmtCreate = gmtCreate;

}

public void setGmtModified(final Date gmtModified) {

this.gmtModified = gmtModified;

}

public void setIsDeleted(final Integer isDeleted) {

this.isDeleted = isDeleted;

}

public void setDeviceType(final String deviceType) {

this.deviceType = deviceType;

}

public String toString() {

return "SysInstrument(id=" + this.getId() + ", name=" + this.getName() + ", number=" + this.getNumber() + ", manufacturer=" + this.getManufacturer() + ", gmtCreate=" + this.getGmtCreate() + ", gmtModified=" + this.getGmtModified() + ", isDeleted=" + this.getIsDeleted() + ", deviceType=" +ZTrSNEWfM this.getDeviceType() + ")";

}

}

整合log4j

https://jb51.net/article/152599.htm

MQTT 物联网系统基本架构

pom

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.4.2

com.shbykj

handle_mqtt

0.0.1-SNAPSHOT

handle_mqtt

Demo project for Spring Boot

1.8

true

org.springframework.boot

spring-boot-starter-integration

org.springframework.integration

spring-integration-stream

org.springframework.integration

spring-integration-mqtt

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-logging

org.slf4j

slf4j-simple

1.7.25

compile

org.springframework.boot

spring-boot-starter-log4j2

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-logging

io.springfox

springfox-swagger-ui

2.9.2

io.swagger

swagger-models

1.5.21

io.springfox

springfox-swagger2

2.9.2

com.google.guava

guava

org.springframework.boot

spring-boot-devtools

true

runtime

com.google.code.gson

gson

org.springframework.boot

spring-boot-starter-data-redis

org.apache.commons

commons-lang3

3.8.1

com.google.guava

guava

30.0-jre

cn.hutool

hutool-core

5.5.0

org.projectlombok

lombok

true

commons-collections

commons-collections

3.2

com.baomidou

spring-wind

1.1.5

com.baomidou

mybatis-plus

com.baomidou

3.1.2

mybatis-plus-boot-starter

mysql

mysql-connector-java

5.1.44

com.alibaba

druid-spring-boot-starter

1.1.10

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.12

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

repackage

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.4.2

com.shbykj

handle_mqtt

0.0.1-SNAPSHOT

handle_mqtt

Demo project for Spring Boot

1.8

true

org.springframework.boot

spring-boot-starter-integration

org.springframework.integration

spring-integration-stream

org.springframework.integration

spring-integration-mqtt

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-logging

org.slf4j

slf4j-simple

1.7.25

compile

org.springframework.boot

spring-boot-starter-log4j2

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-logging

io.springfox

springfox-swagger-ui

2.9.2

io.swagger

swagger-models

1.5.21

io.springfox

springfox-swagger2

2.9.2

com.google.guava

guava

org.springframework.boot

spring-boot-devtools

true

runtime

com.google.code.gson

gson

org.springframework.boot

spring-boot-starter-data-redis

org.apache.commons

commons-lang3

3.8.1

com.google.guava

guava

30.0-jre

cn.hutool

hutool-core

5.5.0

org.projectlombok

lombok

true

commons-collections

commons-collections

3.2

com.baomidou

spring-wind

1.1.5

com.baomidou

mybatis-plus

com.baomidou

3.1.2

mybatis-plus-boot-starter

mysql

mysql-connector-java

5.1.44

com.alibaba

druid-spring-boot-starter

1.1.10

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.12

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

repackage

yml

server:

port: 8082

iot:

mqtt:

clientId: ${random.value}

defaultTopic: topic

shbykjTopic: shbykj_topic

url: tcp://127.0.0.1:1883

username: admin

password: admin

completionTimeout: 3000

#微信小程序相关参数

shbykjWeixinAppid: wxae343ca8948f97c4

shbykjSecret: 9e168c92702efc06cb12fa22680f049a

#spring

spring:

devtools:

restart:

enabled: true

main:

allow-bean-definition-overriding: true

# mysql DATABASE CONFIG

datasource:

druid:

filters: stat,wall,log4j2

continueOnError: true

type: com.alibaba.druid.pool.DruidDataSource

url: jdbc:mysql://localhost:3306/mqttdb?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

# see https://github.com/alibaba/druid

initialSize: 15

minIdle: 10

maxActive: 200

maxWait: 60000

timeBetweenEvictionRunsMillis: 60000

validationQuery: SELECT 1

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

poolPreparedStatements: true

keepAlive: true

maxPoolPreparedStatementPerConnectionSize: 50

connectionProperties:

druid.stat.mergeSql: true

druid.stat.slowSqlMillis: 5000

shbykj:

checkCrc: false

#mybatis

mybatis-plus:

mapper-locations: classpath:/mapper/*.xml

typeAliasesPackage: org.spring.springboot.entity

global-config:

#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";

id-type: 3

#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"

field-strategy: 2

#驼峰下划线转换

db-column-underline: true

#刷新mapper 调试神器

refresh-mapper: true

configuration:

map-underscore-to-camel-case: true

cache-enabled: false

#log4j打印sql日志

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

#logging

logging:

config: classpath:log4j2-demo.xml

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:银行有开放api接口(开放银行sdk和api的区别)
下一篇:新浪股票接口api封ip(新浪股票API)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~