# diboot-message 使用说明
# 1、引入依赖
Maven
<dependency>
<groupId>com.diboot</groupId>
<artifactId>diboot-message-spring-boot-starter</artifactId>
<version>{latestVersion}</version>
</dependency>
1
2
3
4
5
2
3
4
5
或Gradle:
compile("com.diboot:diboot-message-spring-boot-starter:{latestVersion}")
1
组件依赖的数据表message、message_template,在组件starter初次启动时将自动初始化。
如果使用diboot-devtools,还可一键生成该组件相关的controller等基础代码到本地项目下。
# 2、参数配置:
diboot-message组件有以下配置项,用于初始化设置 配置参数:
# 是否初始化sql,默认true,初始化之后(或非开发环境)可以关闭
diboot.component.message.init-sql=false
# 其他spring mail starter相关的参数按spring的文档配置
# spring.mail.xxx
1
2
3
4
5
2
3
4
5
# 3. 使用说明
# 3.1 如何发送简单消息通知(邮件为例)
diboot-message
组件中内置了邮件发送能力,需要邮件发送的场景可以直接使用,调用代码如下:
// 需要发送的消息实体
Message message = new Message()
.setChannel("EMAIL")
.setSender("xxx@qq.com")
.setReceiver("xxx@qq.com")
.setStatus("SEND")
.setTitle("发送标题")
// 这里为消息模版编码
.setTemplateCode("code")
.setBusinessType("业务类型")
.setBusinessCode("业务标识别")
.setExtDataAttribute(Message.RECEIVERS, "xxx@qq.com");
//构建需要替换的变量
BaseUserVariables variables = new BaseUserVariables()
.setPhone(currentUser.getMobilePhone())
.setRealName(currentUser.getRealname());
// 调用发送
messageService.send(message, variables);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Message#setChannel()
属性channel的值,需要和发送通道类型保持一致,(类型见字典MESSAGE_CHANNEL
)
通过 模版变量容器 设置的属性将会自动替换需要发送模版中存在的变量,具体替换逻辑可以参考
TemplateUtils#parseTemplateContent
提供的逻辑
# 3.2 如何自定义发送通道
- 发送通道需要实现接口
ChannelStrategy
,并实现send
方法 - 如扩展短信通道的示例代码如下:
public class SMSChannel implements MessageChannel {
@Override
public String type() {
return Cons.MESSAGE_CHANNEL.SMS.name();
}
@Override
public void send(Message message) {
System.out.println("SMSChannel 发送短信: "+ message.getContent());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 3.3 如何自定义后端模版变量
# 3.3.1 扩展变量定义类
默认我们提供了一个系统模版变量容器
BaseUserVariables
,您可以通过自定义任意变量类来扩展,代码如下:
@Getter
@Setter
@Accessors(chain = true)
@Getter @Setter @Accessors(chain = true)
public class MyVariableObj implements Serializable {
private static final long serialVersionUID = -1993000690817844748L;
@BindVariable(name = "${验证码}")
private String vcode;
@BindVariable(name = "${序列号}")
private String sn;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
注:
MyVariableObj
中的@BindVariable注解对应的变量名称会被自动提取至前端,供新建消息模版选择。
# 3.3.2 注入自定义发送通道与后端模版变量类
since v2.6.0
@Bean
public MessageService messageService() {
return new MessageServiceImpl(
Arrays.asList(new SimpleEmailChannel(), new SystemMessageChannel(), new SMSChannel()),
Arrays.asList(BaseUserVariables.class, MyVariableObj.class)
);
}
1
2
3
4
5
6
7
2
3
4
5
6
7
使用过程中遇到问题,可加群交流。