springboot没有代码生成,也无需 XML 配置。同时也可以修改默认值来满足特定的需求
1.引入起步依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
依赖传递自动导入所需jar包
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication等于以下3个类:
1.@Configuration: 用于定义一个配置类
2.@EnableAutoConfiguration :Spring Boot会自动根据你jar包的依赖来自动配置项目。
3.@ComponentScan: 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
此时可以直接写controller类:
@RestController
public class HelloWorldController {
@RequestMapping("/info")
public String info(){
return "HelloWorld";
}
}
src/main/resources下的application.properties可修改默认配置,如端口号
2.springboot与activeMQ整合:
引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
生产者:
@RestController
public class QueueController {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@RequestMapping("/send")
public void send(String text){
jmsMessagingTemplate.convertAndSend("itcast", text);
}
}
消费者:
@Component
public class Consumer {
@JmsListener(destination="itcast")
public void readMessage(String text){
System.out.println("接收到消息:"+text);
}
}
Spring Boot内置了ActiveMQ的服务,所以我们不用单独启动也可以执行应用程序。
如果我们想使用外部服务,能通过浏览器查看消息队列中的消息:
在src/main/resources下的application.properties增加配置, 指定ActiveMQ的地址
spring.activemq.broker-url=tcp://192.168.25.135:61616
发送map:
消费者:
@RequestMapping("/sendmap")
public void sendMap(){
Map map=new HashMap<>();
map.put("mobile", "13900001111");
map.put("content", "恭喜获得10元代金券");
jmsMessagingTemplate.convertAndSend("itcast_map",map);
}
生产者:
@JmsListener(destination="itcast_map")
public void readMap(Map map){
System.out.println(map);
}
短信服务使用activeMQ,监听消息队列,当页面传入信号即发送短信:
@Autowired
private RedisTemplate<String , Object> redisTemplate;
/**
* 生成短信验证码
*/
public void createSmsCode(String phone){
//生成6位随机数
String code = (long) (Math.random()*1000000)+"";
System.out.println("验证码:"+code);
//存入缓存
redisTemplate.boundHashOps("smscode").put(phone, code);
redisTemplate.boundHashOps("smscode:"+phone).put(code);
//发送到activeMQ
jmsTemplate.send(smsDestination, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
MapMessage mapMessage = session.createMapMessage();
mapMessage.setString("mobile", phone);//手机号
mapMessage.setString("template_code", "SMS_85735065");//模板编号
mapMessage.setString("sign_name", "黑马");//签名
Map m=new HashMap<>();
m.put("number", code);
mapMessage.setString("param", JSON.toJSONString(m));//参数
return mapMessage;
}
});
}
将生成的随机数字放入缓存,将其与用户输入数字进行比对:
public boolean checkSmsCode(String phone,String code){
//得到缓存中存储的验证码
String sysCode = (String) redisTemplate.boundHashOps("smscode").get(phone);
if(sysCode==null){
return false;
}
if(!sysCode.equals(code)){
return false;
}
return true;
}